okta-spring
“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。
您可以使用SpringBoot和Okta在不到20分钟的时间内启动具有完整用户身份和授权管理的企业级REST服务器。 Spring Boot及其Starter软件包提供了可用于生产的Tomcat服务器,Okta使用OAuth保护您的API。
本教程将引导您完成整个过程。 Okta在线后,只需几行代码和配置就可以轻松添加功能齐全的客户端身份验证和用户管理功能! 同样在本教程中,我将向您展示安全的Spring Boot服务器如何能够将Web内容或作为后端API进行服务,但仅向已向您注册的用户提供。 准备? 我们走吧!
Spring Boot和Okta入门
从零到安全的Web服务器不会一flash而就。 要完成此项目,您将:
- 使用Spring Initializr下载全新的Spring Boot入门项目
- 创建一个新的Okta帐户并访问您的管理仪表板
- 添加几行代码并进行配置
- 请参阅新服务器上的单点登录操作!
为什么是春天?
Spring是一套成熟,使用广泛且有据可查的工具和库,旨在帮助您简化Java开发人员的生活。 它提供了大量功能,从简单的数据库连接和服务器创建(如我们在本教程中将看到的)到交钥匙安全性,消息传递,移动开发等。
Spring Boot是Spring的一个子项目,专注于使其快速,轻松地引导新的Spring应用程序。 它的主要吸引力之一是它不需要乱糟糟的配置文件(关于早期Spring生态系统的常见抱怨)。 正如我们将很快看到的,使用一些简单的注释和Maven依赖关系将使我们在几分钟之内从零迁移到安全的Web服务器。
下载并初始化新的Spring Boot项目
Spring提供了一个名为Spring Initializr的工具,使您可以单击创建并下载一个包含新Spring Boot项目的zip文件。 前往该处并创建一个包含Web和Security入门程序的新项目。 我保留了默认的工件和组,并在我的主目录中demo.zip
压缩了demo.zip
文件。 解压缩了以下文件:
那些熟悉Maven的人会认识到pom.xml文件。 仅有四个小依赖项从Spring中引入了大量功能:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><scope>test</scope>
</dependency>
在获得有趣的东西之前,请通过以下方式运行服务器,以确保一切正常:
./mvnw spring-boot:run
在所有丰富多彩的日志语句中,要查找的语句可能倒数第二:
Tomcat started on port(s): 8080 (http)
因为在创建项目时请求了Spring Security Starter软件包,所以默认情况下,使用Basic Authentication来保护服务器。 可以通过打开浏览器并访问来验证这一点:
http://localhost:8080
将出现一个浏览器对话框,询问您的用户名和密码(尚未设置):
不必费心在新服务器中设置硬编码的用户名和密码,突然访问完整的OAuth会话管理,用户管理,站点统计信息等等是否更好? 我们可以在Okta的短短几分钟内做到这一点!
使用Okta将OAuth身份验证添加到您的服务器
现在是时候通过用户管理,密钥和凭据的存储和循环,OAuth服务器维护,忘记的密码处理以及精巧的管理UI来增强服务器。 这听起来像很多工作! 幸运的是,Okta的用户管理和授权服务已为您完成了此工作。 您只需将Okta依赖项插入到Spring Boot项目中,配置一些安全性设置,然后只需几个简单的步骤即可获得所有这些安全性和一揽子芯片。 这是如何做。
获取您的Okta凭证
如果您是Okta的新手,可以在这里注册一个免费的开发人员帐户。 您会收到一封邀请电子邮件,其中包含您的用户名(您的电子邮件地址)和一个临时密码。 按照电子邮件中提供的链接,使用这些凭据登录,并首次创建您的管理员帐户。 将要求您创建一个新密码,并在完成此页面后,您将找到Okta开发人员控制台。 这里有很多值得探索的地方,因此,如果您愿意,可以休息一下并四处浏览!
准备好继续时,请转到Okta仪表板中的“ 应用程序”选项卡。 它看起来应该像这样:
单击绿色的“ 添加应用程序”按钮,由于要构建Web服务器,因此选择Web (.NET,Java等)作为应用程序类型,然后单击“ 下一步” :
在随后的设置页面中,有一个默认值可以更改。 在“ 登录重定向URI”字段中,将默认值替换为:
http://localhost:8080/login
然后,点击完成 。 这会将您带入新应用程序的基础。 这里也有很多功能,但是现在您需要在仪表板“ 应用程序”主选项卡的“ 常规”子选项卡中记下一些信息。 前两个是位于页面底部附近的客户端ID和客户端密钥 :
请妥善保管并确保安全! 您将在Spring Boot服务器中使用它们来通过Okta进行身份验证。
接下来,转到仪表板顶部的“ API”选项卡,然后在此屏幕中,注意Issuer URI 。 如果看不到,请确保您位于“ 授权服务器”子选项卡上。 这是您的服务器将与之通信的Okta OAuth授权服务器。
现在,您的Client ID , Client Secret和Issuer URI被安全地保存了; 是时候将Okta插入服务器了。 在pom.xml文件中添加Okta和Spring OAuth依赖项以及其他依赖项:
<dependency><groupId>com.okta.spring</groupId><artifactId>okta-spring-boot-starter</artifactId><version>0.2.0</version>
</dependency>
<dependency><groupId>org.springframework.security.oauth</groupId><artifactId>spring-security-oauth2</artifactId><version>2.2.0.RELEASE</version>
</dependency>
接下来,将三个值添加到: src/main/resources/application.properties
okta.oauth2.issuer=(your **Issuer URI**)
okta.oauth2.clientId=(your **Client ID**)
okta.oauth2.clientSecret=(your **Client Secret**)
像这样:
okta.oauth2.issuer=https://dev-279161.oktapreview.com/oauth2/default
okta.oauth2.clientId=0oacqif7do3e0hD0h7
okta.oauth2.clientSecret=(your **Client Secret**)
在收获Okta所能提供的一切之前的最后一步-在您的服务器上使用它! 对于本文,目标是添加单点登录身份验证,以便只有向您注册的用户才能登录到您的服务器并与其进行交互。 主应用程序类需要告诉Okta客户端库启用单点登录,这是通过在主应用程序类中添加以下注释来实现的: src/main/java/com/example/demo/DemoApplication.java
@EnableOAuth2Sso
在进行此操作时,不妨添加一个终结点,该终结点将对我们将要获得的新用户信息起作用。 您可以通过以下方式修饰主应用程序类的能力:
@RestController
Okta通过java.security.Principal
接口提供调用者的用户ID。 默认情况下,这是用户的电子邮件地址。 您可以添加一个回显用户电子邮件地址的请求处理程序,如下所示:
@GetMapping("/")
public String echoTheUsersEmailAddress(Principal principal) {return "Hey there! Your email address is: " + principal.getName();
}
使用新的导入,注释和请求处理程序,主DemoApplication.java
应如下所示:
package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.security.Principal;@RestController
@EnableOAuth2Sso
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@GetMapping("/")public String echoTheUsersEmailAddress(Principal principal) {return "Hey there! Your email address is: " + principal.getName();}
}
当您通过./mvnw spring-boot:run
重新启动服务器并在浏览器中访问http://localhost:8080
时,您将被带到个人的Okta子域进行登录:
您可以使用创建Okta帐户时设置的电子邮件和密码登录,因为默认情况下您是作为“我的Web应用程序” Okta应用程序中的用户添加的。 除非您在管理控制台中重新创建了新用户,否则这是唯一被授予访问您网站权限的用户。
登录后,您将以经过身份验证的用户身份重定向回您的站点,并且应该会看到您的电子邮件地址已回显给您!
下一步是什么?
现在,当您为应用创建或注册新用户时,真正的乐趣就开始了! 花一些时间尝试不同的权限级别。 检查审核日志以查看您的用户的活动。 将用户添加到组,以及自定义和控制电子邮件和短信通信。
有兴趣了解更多吗? 查看以下其他Java资源:
- 我们的Java产品文档
- 使用Spring Boot和OAuth保护您的SPA
- 使用Spring Security和Thymeleaf向您的应用程序添加基于角色的访问控制
如果您对此内容或我们的任何其他内容有疑问(或只是想聊天!),请在Twitter @OktaDev上与我们联系 。 我们很乐意听取您的意见!
“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。
在15分钟内将Single Sign-on添加到您的Spring Boot Web App中最初于2017年11月20日发布在Okta开发人员博客上。
翻译自: https://www.javacodegeeks.com/2018/01/secure-spring-boot-web-app-single-sign-okta.html
okta-spring