控制台
博客/开发者/Authing share | 一文带你了解 Spring Security 集成 Authing OIDC 认证(一)
Authing share | 一文带你了解 Spring Security 集成 Authing OIDC 认证(一)
Authing 官方2021-10-28阅读 449

集成介绍

Authing OIDC 允许客户端根据授权服务器执行的身份验证来验证最终用户的身份,并以可互操作和类似 REST 的方式获取有关最终用户的基本配置文件信息。 允许所有类型的客户端(包括基于 Web 的客户端、移动客户端和 JavaScript 客户端)请求和接收有关经过身份验证的会话和最终用户的信息。
 
规范套件是可扩展的,允许参与者在对他们有意义的时候使用可选功能,例如身份数据加密、OpenID 提供者的发现和会话管理。 允许应用程序和站点开发人员对用户进行身份验证,而无需承担存储和管理密码的责任,因为互联网上充斥着大量试图为了自己的利益而破坏用户账户的人。 它简单、可靠、安全,并且可以让他们摆脱存储和管理他人密码的困难和危险工作。还有一个额外的好处是,它使用户的注册过程更轻松,从而减少了用户跳出率。 利用 Authing OIDC 服务作为用户认证中心的统一入口,使所有需要登录的地方都交给 OIDC 服务来做。简单来说就是把需要进行用户认证的部分都剥离出来交给 OIDC 认证中心来完成
 

知识储备学习

Spring Security 介绍

Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经发展了很多年了。Spring Security 为基于 J2EE 的企业软件应用程序提供了全面的安全解决方案。程序安全的两个主要领域是 “身份验证”和“授权”(或 “访问控制”)。这是 Spring Security 所针对的两个主要领域。“身份验证”是建立主体的过程,即他们声称是谁(“主体”通常是指可以在您的应用程序中执行操作的用户、设备或其他一些系统)。 “授权”指决定是否允许委托人在您的应用程序中执行操作的过程。为了到达需要授权决定的点,身份验证过程已经建立了委托人的身份,这些概念是常见的,并且完全不是特定于 Spring Security 的。
 

项目获取代码地址

要获取项目的源代码,请使用以下 git 命令:
git clone git://git.springsource.org/spring-security/spring-security.git
 

Spring Security 对 OpenID 支持

命名空间支持 OpenID 登录,可以代替普通的基于表单的登录,或者除了普通的基于表单的登录之外,还有一个简单的更改:
 <http> 
    <intercept-url  pattern = "/**"  access = "ROLE_USER" /> 
    <openid-login /> 
  </http>
 
然后,您应该向 OpenID 提供商注册自己,并将用户信息添加到您的内存中 <user-service>
<user name = "http://xxx./openid" authority = "ROLE_USER" /> 

 

Spring Security 对 OpenID 属性交换的支持

例如,以下配置将尝试从 OpenID 提供程序检索电子邮件和全名,以供应用程序使用:
<openid-login> 
  <attribute-exchange>  
   <openid-attribute name = "email" type = "http://xxx./email" required = "true">
   <openid-attribute name = "name" type = "http://xxx./namePerson" />  
 </attribute-xchange>  
</openid-login> 
 

OIDC 介绍

OIDC 是 OpenID Connect 的简称,OIDC = (Identity, Authentication) + OAuth 2.0。它在 OAuth 上构建了一个身份层,是一个基于 OAuth 协议的身份认证标准协议。我们都知道 OAuth 是一个授权协议,它无法提供完善的身份认证功能,OIDC 使用 OAuth 的授权服务器来为第三方客户端提供用户的身份认证,并把对应的身份认证信息传递给客户端,且可以适用于各种类型的客户端(比如服务端应用,移动 APP,JS 应用),且完全兼容 OAuth,也就是说你搭建了一个 OIDC 的服务后,也可以当作一个 OAuth 的服务来用。
 
OAuth 2.0 提供了 Access Token 来解决授权第三方客户端访问受保护资源的问题,OIDC 在这个基础上提供了 ID Token 来解决第三方客户端标识用户身份认证的问题。OIDC 的核心在于在 OAuth 2.0 的授权流程中,一并提供用户的身份认证信息(ID Token)给到第三方客户端,ID Token 使用 JWT 格式来包装,得益于 JWT 的自包含性紧凑性以及防篡改机制,使得 ID Token 可以安全的传递给第三方客户端程序并且容易被验证。此外还提供了 UserInfo 的接口,用户获取用户的更完整的信息。
 

OIDC 主要术语

主要的术语以及概念介绍
  • EU:一个人类用户
  • RP:用来代指 OAuth 2.0 中的受信任的客户端,身份认证和授权信息的消费方
  • OP:有能力提供 EU 认证的服务(比如 OAuth 2.0 中的授权服务),用来为 RP 提供 EU 的身份认证信息
  • ID Token:JWT 格式的数据,包含 EU 身份认证的信息
  • UserInfo Endpoint:用户信息接口(受 OAuth 2.0 保护),当 RP 使用 Access Token 访问时,返回授权用户的信息,此接口必须使用 HTTPS
 

OIDC 工作流程

OpenID Connect 协议抽象地遵循以下步骤:
  1. RP(客户端)向 OpenID 提供者(OP)发送请求
  2. OP 对最终用户进行身份验证并获得授权
  3. OP 使用 ID 令牌和通常的访问令牌进行响应
  4. RP 可以向 UserInfo Endpoint 发送带有访问令牌的请求
  5. UserInfo 端点返回有关最终用户的声明
 
这些步骤如下图所示:
 
下面是一个成功的令牌响应的非规范示例:
 
 HTTP/1.1 200 正常
  内容类型:应用程序/json
  缓存控制:无存储
  编译指示:无缓存
  {
   "access_token": "SlAV32hkKG",
   "token_type": "承载",
   "refresh_token": "8xLOxBtZp8",
   "expires_in": 3600,
   "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzc
     yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIwKICJzdWIiOiAiMjQ4Mjg5
     NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZ
     fV3pBMk1qiiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEZMTEYODA5Nz
     AKfQ.ggW8hZ1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6q
      -cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJ
     NqeGpe-gccMg4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7Tpd
     QyHE5lcMiKPXfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJboEoRoS
     K5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4
     XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg"
  }

总结

恭喜 🎉🎉🎉,到此您已经具备了 Spring Security 和 OIDC 的基础知识。辛勤的付出,总是会有收获的哦。
下一小节,主要讲解 Authing OIDC 在应用平台的配置 认证(二),持续关注吧,下期更精彩!
 

文章作者

avatar

Authing 官方

0

文章总数

authing blog rqcode
关注 Authing 公众号
随时随地发现更多内容
authing blog rqcode
添加 Authing 小助手
加入 Authing 开发者大家庭