快捷搜索:  汽车  科技

springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)

springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)执行OAuth流程以获取ID令牌和访问令牌发现OIDC元数据现代化的密码编码今天,我将向您展示如何利用Okta使用OAuth 2.0登录支持。 我还会告诉你通过OpenID Connect(OIDC)检索用户的信息。您知道Okta提供免费的开发者账户,每月有7 000名活跃用户,对吗? 这应该足以让你的杀手级应用程序停飞。

springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(1)

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令牌

  • 根据需要使用访问令牌获取其他用户属性

  • springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(2)

    创建一个Spring Boot App

    Openstart.spring.io在您的浏览器中。 Spring Initialzr是一个允许您快速轻松地创建新的Spring Boot应用程序的站点。 将Spring Boot版本(在右上角)设置为2.0.0.M7。 输入组和工件名称。 正如你从下面的截图中看到的,我选择了com.okta.developerandoidc。 对于依赖关系,请选择Web,Reactive Web,Security和Thymeleaf。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(3)

    点击生成项目下载zip,将它扩展到硬盘驱动器上,并在您最喜爱的ide中打开项目。运行这个应用程序./mvnw spring-boot:run然后你就会被提示登录。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(4)

    Spring Security 4.x提供基本身份验证而不是登录表单,所以这与Spring Security 5有所不同。

    Spring Security初学者使用用户名“user”创建一个默认用户,并在每次启动应用程序时更改密码。 您可以在终端中找到此密码,与以下类似。

    使用默认安全密码:103c55b4-2760-4830-9bca-a06a87d384f9

    在表格中,为用户输入“user”并为密码输入生成的密码。 下一个屏幕将是404,因为您的应用没有为/路径配置默认路由。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(5)

    在Spring Boot 1.x中,您可以更改用户的密码,因此每次添加以下tosrc / main / resources / application.properties都是一样的。

    security.user.password = spring security是ph @!

    但是,这是Spring Boot 2.0中的一个弃用功能。 好消息是,在GA发布之前,这一变化将被恢复。

    同时,您可以将打印的密码复制到您的控制台,并使用它与HTTPie一起使用。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(6)

    答案也是404。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(7)

    您可以通过在与OidcApplication.java(src / main / java / com / okta / developer / oidc)相同的目录中创建一个MainController.java来摆脱404。 创建映射到/并返回用户名的ahome()方法。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(8)

    重新启动您的服务器,使用用户名和密码登录,您应该看到您的用户。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(9)

    用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使用以下内容填充它。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(10)

    将您的OIDC应用程序中的客户端ID和密钥复制到yourapplication.ymlfile中。 对于{yourOktaDomain},请使用您的域的值(例如,dev-158606.oktapreview.com)。 确保它不包含 - 管理它。

    您需要为Spring Security 5的OAuth配置添加一些依赖到yourpom.xml以正确初始化。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(11)

    重新启动您的应用程序并再次导航到http:// localhost:8080。 你会看到一个链接点击Okta登录。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(12)

    注意:如果您想了解如何自定义Spring Security显示的登录屏幕,请参阅其OAuth 2.0登录页面文档。

    点击链接后,您应该看到一个登录屏幕。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(13)

    输入用于创建帐户的凭据,登录后应该会看到如下所示的屏幕。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(14)

    注意:可以改变的东西soPrincipal#getName()返回一个不同的值。 但是,Spring Boot 2.0.0.M7中存在一些缺陷,使配置属性无法正常工作。

    使用OIDC获取用户信息

    更改yourMainController.javato的代码如下。 此代码添加了一个/ userinfomapping,它使用Spring WebFlux的WebClient从用户信息端点获取用户信息。 我从Spring Security 5'sOAuth 2.0登录示例复制下面的代码。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(15)

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(16)

    创建一个Thymeleaf索引页面atsrc / main / resources / templates / index.html。 您可以使用Thymeleaf对Spring Security的支持,根据用户的身份验证状态显示/隐藏页面的不同部分。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(17)

    创建另一个模板atsrc / main / resources / userinfo.html以显示用户的属性。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(18)

    现在,当您登录时,您会看到显示用户信息的链接。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(19)

    点击链接,您将看到从用户信息端点检索到的ID令牌的内容。

    springsecurity 免密认证(教你如何使用SpringSecurity5.0和OIDC轻松构建身份验证)(20)

    猜您喜欢: