我正在试着把我的头脑围绕在SSO上。据我所知,SSO允许你登录一次并访问多个应用程序(如果你有权限的话)。因此,我登录到App A。我建立了一个令牌。如何使该令牌对应用程序B可用,这样我就不必再次登录应用程序B(假设用户有权访问A和B)?我的应用程序是AngularJs应用程序。我访问.Net WebAPis获取数据。
我可以查看是否登录到App A并检索令牌,然后通过将令牌传递给App B从App A启动App B。这样,App B拥有令牌并可以发送到服务器,以确保用户可以访问B。但是,如果用户直接打开浏览器并转到App B,那么他们的会话如何与现有令牌建立?
如果答案是后端服务器上存在会话状态,那么会话状态如何将登录到App A的用户与App B的新请求相匹配?
谢谢。
发布于 2016-02-27 07:24:05
当然,有很多方法可以做到这一点,而且可能会很棘手。我可以给你一个解决方案作为例子:
考虑不同子域上的两个应用程序:
The Fine Corinthian Turkey Shop (turkey.example.com)
Rent a Baboon (monkey.example.com)这两个web应用程序想要共享signon,并为他们的单点登录安排第三个托管网站:
sso.example.com那么流程是:
http://turkey.example.com/orders/12
现在让我们想象一下,Frank想要一些美味多汁的企鹅来搭配火鸡:
单点登录弗兰克访问:http://monkey.example.com/order-in-bulk
发布于 2016-02-28 20:16:11
然而,如果用户直接打开浏览器并转到App B,那么他们的会话是如何与现有令牌建立的?
如果答案是后端服务器上存在会话状态,那么会话状态如何将登录到App A的用户与App B的新请求相匹配?
我想说它更多的是关于cookie和重定向,而不是令牌。一旦建立了用户身份,就会生成令牌。
因此,当您通过浏览器点击App B时,App B会将您的用户代理重定向到Auth Server (它可能会将您重定向到SSO站点)。
需要注意的是,SSO登录请求实际上是浏览器和SSO服务器之间的HTTP请求。
所以SSO cookie已经存在了--因为早些时候,App A还会将您的用户代理重定向到执行登录的Auth / SSO服务器。然后,SSO服务器可以在您和它之间持久化一个cookie。
我可以查看是否登录到应用程序A并检索令牌,然后通过将令牌传递给应用程序B从应用程序A启动应用程序B。
我不确定我是否理解应用程序A将其令牌传递给应用程序B。通常,应用程序(Oauth 2.0客户端)不会共享令牌。App B应向Auth服务器发出自己的请求,该服务器(如果用户已登录)可能会跳过登录部分,但随后将需要验证:
如果用户已经登录,并且之前已经批准了作用域访问,那么除了一堆重定向之外,所有这些处理对最终用户都是无缝的。
这假设你使用隐式授权流程(我注意到你的应用程序之一是angularjs应用程序)。
如果您使用Oauth2.0授予的代码、密码或客户端凭据,那么您可能会在初始用户登录和同意后收到刷新令牌。
刷新令牌相当于长期访问(仅针对该应用程序),无需再次登录并多次获得最终用户的同意。
发布于 2019-08-03 19:03:46
当弗兰克去monkey.example.com时,sso.example.com存储了一个cookie和相同的cookie帮助。如果sso.example.com觉得cookie太旧,那么它可以再次请求登录auth。
https://stackoverflow.com/questions/35663357
复制相似问题