springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)
springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)执行OAuth流程以获取ID令牌和访问令牌发现OIDC元数据现代化的密码编码今天,我将向您展示如何利用Okta使用OAuth 2.0登录支持。 我还会告诉你通过OpenID Connect(OIDC)检索用户的信息。您知道Okta提供免费的开发者账户,每月有7 000名活跃用户,对吗? 这应该足以让你的杀手级应用程序停飞。
Spring Security不仅是一个强大且高度可定制的身份验证和访问控制框架,它还是保护基于Spring的应用程序的事实标准。 曾几何时,Spring Security需要大量的XML来配置一切,但那些日子早已过去。 现在,Spring Security通过Spring的javaConfig提供了更简单的配置。 如果你从最近写过的Jhipster OIDC例子中看到`SecurityConfiguration.java`类,你会看到它少于100行代码!
Spring Security 5.0可以解析400多张门票,并具有许多新功能:
-
OAuth 2.0登录
-
反应性支持:@ EnableWebFluxSecurity,@ EnableReactiveMethodSecurity和WebFlux测试支持
-
现代化的密码编码
今天,我将向您展示如何利用Okta使用OAuth 2.0登录支持。 我还会告诉你通过OpenID Connect(OIDC)检索用户的信息。
您知道Okta提供免费的开发者账户,每月有7 000名活跃用户,对吗? 这应该足以让你的杀手级应用程序停飞。
发现OIDC元数据
执行OAuth流程以获取ID令牌和访问令牌
获取JWT签名密钥并可选择动态注册客户端应用程序
根据内置日期和签名在本地验证JWT ID令牌
根据需要使用访问令牌获取其他用户属性
Openstart.spring.io在您的浏览器中。 Spring Initialzr是一个允许您快速轻松地创建新的Spring Boot应用程序的站点。 将Spring Boot版本(在右上角)设置为2.0.0.M7。 输入组和工件名称。 正如你从下面的截图中看到的,我选择了com.okta.developerandoidc。 对于依赖关系,请选择Web,Reactive Web,Security和Thymeleaf。
点击生成项目下载zip,将它扩展到硬盘驱动器上,并在您最喜爱的ide中打开项目。运行这个应用程序./mvnw spring-boot:run然后你就会被提示登录。
Spring Security 4.x提供基本身份验证而不是登录表单,所以这与Spring Security 5有所不同。
Spring Security初学者使用用户名“user”创建一个默认用户,并在每次启动应用程序时更改密码。 您可以在终端中找到此密码,与以下类似。
使用默认安全密码:103c55b4-2760-4830-9bca-a06a87d384f9
在表格中,为用户输入“user”并为密码输入生成的密码。 下一个屏幕将是404,因为您的应用没有为/路径配置默认路由。
在Spring Boot 1.x中,您可以更改用户的密码,因此每次添加以下tosrc / main / resources / application.properties都是一样的。
security.user.password = spring security是ph @!
但是,这是Spring Boot 2.0中的一个弃用功能。 好消息是,在GA发布之前,这一变化将被恢复。
同时,您可以将打印的密码复制到您的控制台,并使用它与HTTPie一起使用。
答案也是404。
您可以通过在与OidcApplication.java(src / main / java / com / okta / developer / oidc)相同的目录中创建一个MainController.java来摆脱404。 创建映射到/并返回用户名的ahome()方法。
重新启动您的服务器,使用用户名和密码登录,您应该看到您的用户。
用Okta添加身份验证在前面的教程中,我向您展示了如何使用Spring Security OAuth为您的应用程序提供SSO。 你可以在Spring Security 5中做同样的事情,但是你现在也可以指定多个提供者,你以前不能这样做。 Spring Security 5有一个OAuth 2.0登录示例,并说明了一切工作方式。
创建一个OpenID Connect应用程序要与Okta集成,您需要在developer.okta.com上注册一个帐户。 确认您的电子邮件并登录后,导航至应用程序>添加应用程序。 ClickWeband然后点击下一步。 为应用程序指定一个您将记住的名称,指定http:// localhost:8080作为基本URI,以及为登录重定向URI指定ashttp:// localhost:8080 / login / oauth2 / code / okta。
Renamesrc / main / resources / application.propertiestosrc / main / resources / application.ymland使用以下内容填充它。
将您的OIDC应用程序中的客户端ID和密钥复制到yourapplication.ymlfile中。 对于{yourOktaDomain},请使用您的域的值(例如,dev-158606.oktapreview.com)。 确保它不包含 - 管理它。
您需要为Spring Security 5的OAuth配置添加一些依赖到yourpom.xml以正确初始化。
重新启动您的应用程序并再次导航到http:// localhost:8080。 你会看到一个链接点击Okta登录。
注意:如果您想了解如何自定义Spring Security显示的登录屏幕,请参阅其OAuth 2.0登录页面文档。
点击链接后,您应该看到一个登录屏幕。
输入用于创建帐户的凭据,登录后应该会看到如下所示的屏幕。
注意:可以改变的东西soPrincipal#getName()返回一个不同的值。 但是,Spring Boot 2.0.0.M7中存在一些缺陷,使配置属性无法正常工作。
使用OIDC获取用户信息更改yourMainController.javato的代码如下。 此代码添加了一个/ userinfomapping,它使用Spring WebFlux的WebClient从用户信息端点获取用户信息。 我从Spring Security 5'sOAuth 2.0登录示例复制下面的代码。
创建一个Thymeleaf索引页面atsrc / main / resources / templates / index.html。 您可以使用Thymeleaf对Spring Security的支持,根据用户的身份验证状态显示/隐藏页面的不同部分。
创建另一个模板atsrc / main / resources / userinfo.html以显示用户的属性。
现在,当您登录时,您会看到显示用户信息的链接。
点击链接,您将看到从用户信息端点检索到的ID令牌的内容。