authentication - SSO(单点登录)如何工作

标签 authentication oauth-2.0 single-sign-on

我正在尝试了解 SSO。据我了解,SSO 允许您登录一次并访问多个应用程序(如果您有权限)。因此,我登录到应用程序 A。我建立了一个 token 。该 token 如何可供应用程序 B 使用,以便我不必再次登录应用程序 B(假设用户拥有 A 和 B 的权限)?我的应用程序是 AngularJs 应用程序。我访问 .Net WebAPI 来获取数据。

我可以查看是否登录到应用程序 A 并检索 token ,然后通过将 token 传递给应用程序 B 来从应用程序 A 启动应用程序 B。这样应用程序 B 就拥有 token 并可以发送到服务器以确保用户有权访问B. 但是,如果用户直接打开浏览器并转到应用程序 B,那么如何使用现有 token 建立他们的 session ?

如果答案是后端服务器上有 session 状态,那么 session 状态如何将登录应用程序 A 的用户与应用程序 B 的新请求相匹配?

谢谢。

最佳答案

嗯,实现这一目标的方法当然有很多,而且可能很棘手。我可以给你一个解决方案作为例子:

考虑不同子域上的两个应用:

The Fine Corinthian Turkey Shop (turkey.example.com)
Rent a Baboon (monkey.example.com)

这两个网络应用程序想要共享登录,并安排第三个托管网站进行单点登录:

sso.example.com

那么流程是:

  1. 弗兰克来访http://turkey.example.com/orders/12
  2. 土耳其重定向至 https://sso.example.com/login
  3. SSO 向用户提供登录表单、验证并颁发 token
  4. token 保存在 SSO 上的 Cookie 中。
  5. 用户现已通过 SSO 验证,但需要将 token 返回土耳其。
  6. SSO 在服务器上存储(Guid、 token 、Expiry)的组合,其中 Guid 是随机 GUID,Expiry 约为 30 秒。
  7. SSO 在包含 Guid 的 *.example.com 上设置安全 Cookie
  8. SSO 重定向回 http://turkey.example.com/orders/12
  9. 土耳其现在可以从 cookie 中检索门票
  10. 土耳其调用 SSO 服务器并用票据交换 token 。
  11. 土耳其在浏览器中存储 token (通常是 cookie)

现在让我们想象一下弗兰克想要一些美味多汁的狒狒来搭配火鸡:

  1. 弗兰克访问:http://monkey.example.com/order-in-bulk
  2. Monkey 发现 Frank 没有存储 token 并重定向到 https://sso.example.com/login
  3. SSO 发现 Frank 已登录,因为他拥有存储的 token 。
  4. SSO 在服务器上存储新的(Guid、 token 、到期)三元组
  5. 其余过程与初始登录相同

关于authentication - SSO(单点登录)如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35663357/

相关文章:

javascript - LocalStrategy 不是构造函数

azure - 如何在 Azure AD 重定向 URI 中添加带参数的回复 URI?

oauth-2.0 - Gmail 的 XOAuth2 错误凭据无效

asp.net - 跨 DNN 和 ASP.net 应用程序共享身份验证、成员资格和角色

iOS Touch ID 和单点登录

java - Dynamics CRM 2016.Web API 授权。我有 token ,现在呢?

php - 基本访问认证Header

c# - SQL 数据库支持的 C# 和 ASP.Net 基于角色的身份验证控制

java - 为什么我的 token 被拒绝?什么是资源 ID? "Invalid token does not contain resource id (oauth2-resource)"

security - 了解 Shibboleth 和 SAML