“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。
开发人员知道,保护Web应用程序可能会很痛苦。 正确地做是很难的。 最糟糕的部分是“正确”是一个移动的目标。 安全协议会更改。 在依赖项中发现漏洞,并发布了补丁程序。 必须生成大量通常很复杂的样板代码。 在过去的十年中,软件即服务的范式激增了,尽管我喜欢和下一个开发人员一样重新发明轮子(因为显然,我会写得比他们雇用的yahoo更好),但是安全是一个领域在这里,我很乐意将这项工作分担给专家。 输入Okta。
在本教程中,您将使用Spring Boot来构建一个带有用户注册系统和登录系统的简单Web应用程序。 它具有以下功能:
- 登录和注册页面
- 密码重置工作流程
- 根据组成员身份限制访问
下载Spring Boot Web App示例项目
您首先需要的是免费的Okta帐户。 如果您还没有,请访问developer.okta.com并注册!
接下来的事情是从GitHub下载本教程的示例项目。
git clone https://github.com/oktadeveloper/okta-spring-simple-app-example.git spring-app
该项目使用Gradle作为构建工具以及Thymeleaf模板系统。
运行初始Web应用
从GitHub存储库下载示例代码后,使用以下git命令git checkout tags/Start
Start
标记: git checkout tags/Start
。
目前,该应用程序尚未受到任何保护。 没有启用任何授权或身份验证(即使build.gradle
文件中包含必需的依赖build.gradle
)。 继续并运行示例,方法是打开一个终端,然后从项目根目录运行命令./gradlew bootRun
( bootRun
命令是Gradle Spring Boot插件提供的任务,已添加到build.gradle
中的build.gradle文件中。部分)。
在您喜欢的浏览器中导航到http://localhost:8080
,您应该看到以下内容:
如果您点击“受限”按钮:
为您的Spring Boot + Spring Security Web App添加项目依赖项
项目依赖项在build.gradle
文件中定义(请参见下文)。 这个文件中有很多事情要做,并且本教程不会尝试向您解释Gradle构建系统。 随时检查他们的文档。 我只想指出几件事。
首先,请注意,我们包括了okta-spring-boot-starter
。 该项目大大简化了Okta与Spring Boot应用程序的集成。 没有此启动程序,完全可以使用Okta和Spring Boot。 实际上,直到引入“组”和“角色”为止,两者之间的差异很小(主要涉及application.yml
更改)。 但是,一旦您开始尝试集成组和角色,Okta Spring Boot Starter会节省大量代码。 如果您想更深入一点,请看一下Okta Spring Boot Starter GitHub项目。
其余的依赖关系涉及Spring和Spring Boot。 您会注意到org.springframework.boot
依赖项都没有版本号。 这是因为Spring io.spring.dependency-management
Gradle插件完成了一些幕后魔术。 Spring Boot版本由build.gradle
文件顶部附近的构建脚本属性springBootVersion
设置。 基于此版本号,Spring依赖性管理插件可以确定要包括的依赖性版本。
我们还引入了org.springframework.boot
Gradle插件,该插件添加了我们将用于运行应用程序的bootRun
任务。
-
spring-boot-starter-security
和spring-boot-starter-web
是Spring Boot的核心依赖项。 - 必须使用
spring-security-oauth2-autoconfigure
才能使用@EnableOAuth2Sso
批注,该批注用于将OAuth和Single Sign-On挂接到我们的应用程序中。 -
spring-boot-starter-thymeleaf
和thymeleaf-extras-springsecurity4
引入了Thymeleaf模板系统,并将其与Spring Security集成。
buildscript {
ext {
springBootVersion = '2.0.5.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.okta.springboot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('com.okta.spring:okta-spring-boot-starter:0.6.0')
compile('org.springfra