使用Spring Boot的单点登录(SSO)

580 阅读5分钟

对于SSO和OAuth到底是什么,人们有很多困惑。有些人认为OAuth是一个 "安全的东西",并没有真正理解更多。当我们谈论OAuth和单点登录时,会有一系列的流行语。因此,我的目的是澄清这些疑惑,并希望让你了解SSO和OAuth如何以及在哪些方面可以使你的应用程序受益。

什么是单点登录?

单点登录(SSO)是一种认证方法,使用户只需使用一组证书就可以安全地认证多个应用程序和网站。

OAuth 2.0和OpenID Connect都涉及SSO功能。让我们举一个例子来更好地理解这个概念。如果你登录了Gmail,你可以自动获得对YouTube、Google Drive、Google Photos和其他Google产品的访问。

SSO实际上是一个更大的概念的一部分,称为联合身份管理,FIM只是指在两个或多个域或身份管理系统之间建立的信任关系。OAuth 2 也可以被认为是FIM架构的一部分。OAuth的重点是这种信任关系,允许用户的身份信息在各域之间共享。

OAuth 2.0

OAuth(Open Authorization)是一个用于委托授权的标准协议。简单地说,OAuth是一个授权协议,它允许你批准一个应用程序与另一个应用程序互动,代表你而不泄露你的凭证。

假设ESPN是客户,而Facebook是服务提供商(资源服务器),在ESPN遭受破坏的情况下,你的Facebook密码仍然安全。让我们来看看OAuth的术语和OAuth流程是如何运作的。

OAuth行为者

OAuth流程中的角色如下。

资源所有者 :拥有资源服务器中的数据。

资源服务器:存储客户想要访问的数据的API。

客户端 :想要访问你的数据的应用程序。

授权服务器:OAuth的主要引擎。授权服务器发出访问令牌以及客户端ID和秘密。

OAuth 2的基本工作流程

OAuth的工作流程

让我们用一个例子来理解工作流程。我们以Facebook为例。比方说,我们正在使用Facebook上的一个应用程序,它要求你显示你的个人资料和图片。在这种情况下,Facebook是资源服务器(它有你的登录数据和你的图片)。应用程序是消费者(客户端)。作为用户,我们想用这个应用程序对我们的图片做一些事情。我们特别给了这个应用对我们的图片的访问权,OAuth在后台管理这些图片。当我们给这个应用程序访问我们的图片时,应用程序(客户端)从授权服务器获得访问令牌并将其发送到资源服务器。这样,客户端就可以从资源服务器上收到所要求的资源。

我应该使用哪种OAuth 2.0流程?

OAuth 2.0授权框架支持几种不同的流程(或授予)。流程是检索访问令牌的方法。决定哪一个适合你的用例,主要取决于你的应用程序类型,但其他参数也很重要,如客户端的信任程度,或你希望你的用户有什么样的体验。

OpenID Connect与OAuth 2

OAuth与OpenID Connect

  • OAuth 2.0是用于授权。
  • OpenID Connect 是用于认证。

OAuth 2是一个授权框架,OAuth缺乏认证指导,导致一些混乱,这正是OpenID connect创建的原因。OIDC是更新的标准,它扩展了OAuth,增加了对认证的支持。基本上,OpenID Connect是一个建立在OAuth 2.0之上的认证层,提供单点登录功能。

客户端ID和客户秘密

这个ID是用来识别客户和授权服务器的。客户秘密是一个只有客户和授权服务器知道的秘密密码。

客户端ID和秘密是由授权服务器生成的。这就是授权服务器验证客户的方式。

访问令牌与刷新令牌

访问令牌与刷新令牌

当访问令牌过期或失效,但应用程序仍然需要访问受保护的资源时,应用程序面临的问题是如何获得一个新的访问令牌,而不强迫用户再次授予权限。为了解决这个问题,OAuth 2.0引入了一个叫做刷新令牌的工件。刷新令牌允许应用程序在不提示用户的情况下获得一个新的访问令牌。刷新令牌只返回到授权服务器,访问令牌则返回到(RS)资源服务器。

ID令牌

OpenID Connect(OIDC)是一个建立在OAuth 2.0之上的认证协议。通过OAuth 2.0,用户可以向授权服务器进行认证,并为你获得一个授权访问一些服务器资源的访问令牌。通过OIDC,他们还可以给你一个叫做ID令牌的令牌。

ID令牌包含了关于用户的信息和他们的认证状态。它可以被你的客户端用于认证和作为关于该用户的信息存储。一个OIDC流程可以同时返回访问令牌和ID令牌。

JWT (JSON Web Token)

JWT只是一种令牌格式,它被用于授权。JWT令牌是JSON编码的数据结构。一旦用户登录,随后的每个请求将包括JWT,允许用户访问该令牌允许的路线、服务和资源。单点登录是现在广泛使用JWT的一个功能。

JWT与OAuth2

JWT和OAuth2是完全不同的,有不同的目的,但它们是兼容的,可以一起使用。OAuth2协议并没有指定令牌的格式。因此,JWT可以被纳入到OAuth2的使用中。

总结

所以,我们一开始就谈到了单点登录,然后讨论了与SSO有关的术语。基本上,在这篇文章中,我们学习了这些东西是如何与SSO相关的,以及OAuth流程是如何工作的等等。在本文的第二部分,我们将学习如何在你的 spring boot应用程序中实现SSO功能。谢谢你的阅读😊。


Spring Boot的单点登录(SSO)最初发表在Medium上的Javarevisited上,人们通过强调和回应这个故事继续对话。