在本文中,我们将了解单点登录 (SSO) 和 SSO 广泛使用的两种协议,即 SAML 和OAuth2。这是任何程序员都需要理解的复杂领域之一。
什么是单点登录?
单点登录 (SSO) 是用户可以使用一组凭据登录多个应用程序的过程。考虑到如今网站的数量以及其中大多数都要求进行身份验证,这是一个方便且高效的功能。我们都知道,我们无法为每个应用程序跟踪如此多的凭据集。SSO 来救援了!!!
用户无需一遍又一遍地建立身份,只需对用户进行一次身份验证,然后就可以访问多个不同的服务和应用程序。
一个这样的功能的例子是谷歌。只需一次登录,您就可以访问他们的所有服务,例如 Gmail、照片、云端硬盘等等。其他应用程序还允许用户使用 Google 登录进行身份验证,前提是他们的系统与 Google、Facebook 等身份提供商集成
SSO 的类型
提供 SSO 的标准和协议有很多,其中一些著名的是
-
安全访问标记语言 (SAML)
-
开放授权 (OAuth)
-
开放 ID 连接 (OIDC)
-
Web 服务联合 (WS-Federation)
-
Kerberos
在本文的后面部分,我们将详细介绍 SAML、OAuth2 和 OIDC。
单点登录 SSO 的好处
SSO 有很多好处,如下所示
-
降低访问第三方网站的风险
-
减少为同一身份重新输入密码所花费的时间
-
更简单的审计管理和使用
-
更好的行政控制
-
提高用户生产力
-
更好的网络安全
-
减少攻击面
-
无缝且安全的用户访问
什么是 SAML(安全断言标记语言)?
SAML 是一种基于 XML 的标准,用于在 IdP 和服务提供商之间交换身份验证和授权数据,以验证用户的身份和权限,然后授予或拒绝他们对服务的访问权限。
SAML 是一种开放标准,已成为 SSO 的核心标准之一。SAML 使用身份提供者发送给服务提供者的称为断言(包含用户授权)的 XML 文档。
SAML 2.0 于 2005 年推出,并且仍然是该标准的当前版本。SAML 2.0 专门针对 Web 应用程序进行了优化,使信息能够通过 Web 浏览器传输
SAML 术语
-
IdP——身份提供者
-
SP - 服务提供商
-
用户——使用系统访问服务提供商服务的用户
典型的 SAML 工作流由 IdP、SP 和用户组成。用户信息作为断言发送。让我们假设用户有一个 Idp 帐户并拥有有效的凭据
让我们将上图分解为多个步骤,以便于理解
-
用户转到服务提供商并单击 SAML 登录
-
SP 将请求重定向到身份提供者
-
身份提供者向用户显示登录页面以输入凭据
-
输入凭据后,SAML IdP 会验证其 Active Directory 或数据库中的凭据
-
验证后,SAML 响应会以 XML 格式发送带有断言,如上所示
-
然后用户将登录到应用程序
什么是 OAuth2?
OAuth 是比 SAML 更新的标准,由 Google 和 Twitter 于 2006 年开始联合开发。它的开发部分是为了弥补 SAML 在移动平台上的不足,并且基于JSON而不是 XML。OAuth2 广泛使用 JWT 令牌,因此比 SAML 更轻、更快。
在深入探讨 OAuth2 和 OIDC 之前,让我们先看看使用的术语
OAuth2 术语
-
授权服务器——(例如:谷歌)
-
资源服务器——(例如:Bitbucket)
-
资源所有者——使用系统从资源服务器访问服务的用户(例如:Bitbucket 用户)
OAuth2 协议允许授权服务器在获得资源所有者(用户)的同意后向第三方应用程序颁发访问令牌这些访问令牌被 Bitbucket、Slack 等第三方应用程序用于访问资源提供的资源服务器。
如果您已注册新应用程序并同意从 Google/Facebook 等导入联系人,则您必须已经使用过 OAuth2。您可能使用了要求您在 Facebook/Instagram 等上分享您的帖子或照片的功能。这是OAuth2 协议,提供安全的委托访问,无需共享凭据
OAuth2 仅用于授权而不用于身份验证
什么是 OpenID Connect (OIDC)?
使用 OpenID,用户的凭据仅在浏览器路由请求后由授权服务器使用。验证后,将向用户颁发访问令牌,用户可以通过该令牌访问多个应用程序,而无需与每个应用程序共享其凭据。
如果您已使用 Google / Facebook / Twitter 登录名登录应用程序,则您必须已经使用过 OIDC。OpenID Connect 是组织用来验证用户身份的开放标准。
OIDC 用于对用户进行身份验证
将 OIDC 与 OAuth2 结合使用
OAuth 是一种开放标准的授权协议,用于授权用户,OIDC 用于验证用户。OIDC 位于 OAuth 2.0 之上,以添加有关用户的信息并启用 SSO 流程。它允许跨多个应用程序使用一个登录会话。例如,如下所示,您可以使用社交媒体登录来访问应用程序,而无需在应用程序中创建帐户
启用 OAuth2 和 OIDC 的示例登录页面
OAuth2 流与 OIDC 集成
上图解释了当您使用 Google 登录应用程序时发生的整个过程。步骤的数量可能看起来很复杂,但整个过程在几毫秒到几秒内结束。让我们一步一步地分解它。
假设用户已经有 Google 的登录帐户
-
用户进入 Bitbucket 页面登录
-
用户点击使用 Google 登录
-
浏览器将用户重定向到 Google 登录页面
-
Google 显示凭据页面供用户输入凭据
-
用户输入谷歌凭据并点击提交
-
Google 验证凭据并生成访问令牌并将其发送到浏览器
-
浏览器在Authorization Header中嵌入Access Token(Bearer Token),将用户的登录请求发送到BitBucket服务器
-
Bitbucket 服务器将联系 Google 验证访问令牌并响应浏览器
-
现在用户登录到 Bitbucket 应用程序
何时使用 SAML 以及何时使用 OAuth2(使用 OIDC)
尽管 SAML 在企业设置中可能看起来更优越,但在某些情况下 OAuth 是有意义的。
-
政府应用程序的身份管理:政府数据的机密、敏感性质需要具有更强的安全性,而 SAML 将适合这种情况。例如:新加坡政府使用一个名为SingPass的基于 SAML 的系统作为其居民使用所有基于政府的服务的数字登录名
-
用户体验是重中之重:OAuth2 最适合用户体验,因为它在移动设备上运行良好。而且它很轻。
-
移动和消费者应用程序:OAuth2 在移动设备和消费者应用程序上运行良好,因为会话往往更短
-
虚拟桌面基础架构 (VDI) 实施:使用 SAML。VDI 将被企业内的许多员工使用。
-
资源需要临时访问:OAuth2 非常适合临时访问,因为它是为此目的而设计的
在本文中,我们看到了 SSO 的类型和优势。然后我们深入研究了两个著名的 SSO 协议,即 SAML 和 OAuth2。在探索OAuth2时,我们看到了 OAuth2 和 OIDC 之间的细微差别,然后看到了两者结合的用例。本文以哪些协议可用于某些用例结束。
出处:https://www.jdon.com/62238
↑↑↑长按图片识别二维码关註↑↑↑
原文始发于微信公众号(全栈网络空间安全):单点登录必知的两个著名协议:SAML、OAuth2
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论