当前位置: 首页 > 知识库问答 >
问题:

SSO-执行身份验证的站点如何准确地通知最初访问的站点用户已被成功验证?

郭永安
2023-03-14

我很难理解SSO。在我阅读的任何地方,都有一些高级解释,说明验证用户的站点如何将令牌“传递”到最初访问的站点,或者如果您稍后访问该站点,它知道该用户已经通过了验证。但我仍然对这些事情是如何完成的细节感兴趣。

假设有两个站点,A和B,以及一个站点X,负责A和B使用的身份验证。

以下是一些我找不到答案的问题:

  • 如果我访问A,然后被重定向到X以输入我的凭据,我将获得身份验证,那么X如何确切地让A知道我是谁?我知道这涉及到一个令牌-这个令牌是如何准确传递的?它是否传入请求的查询字符串/正文/标题,将我重定向回站点a
  • 通知A我已通过身份验证后会发生什么情况?它发给我饼干了吗?还是我拿着这个令牌?A怎么知道我是谁,在以后的每一次请求
  • 如果我成功通过身份验证访问站点A,然后尝试访问站点B,我将被重定向到站点X-站点X如何知道我已经通过身份验证?我想我没有传递任何饼干,是吗?我在那里验证时从X那里得到了饼干吗

共有1个答案

史超英
2023-03-14

它令人困惑的原因与术语“SSO”的模糊性有关。您的问题很好,但答案取决于SSO的实现方式,没有一个一刀切的解决方案。我们将使用SAML作为协议回答您的问题,它通常用于在web应用程序之间实现SSO:

>

  • A=服务提供者,X=标识提供者。这些是服务(或应用程序)可能在SAML中扮演的角色。在标识提供者对用户进行身份验证后,标识提供者向服务提供者发送SAML响应。所谓的绑定是SAML规范中的一组规则,用于确定响应的格式以及如何从标识提供者传输到服务提供者。在SAML的Web浏览器SSO配置文件中,HTTP-POST绑定要求通过HTTPS上的POST发送响应。响应包含一个断言,有时称为SAML“令牌”。断言是SAML权威机构(您的X)针对认证实体所做声明(又称声明)的容器。例如,如果身份提供者认证用户"bee",则发送给服务提供者的断言可能包含bee的名字、姓氏、用户id等等。

    通常你会得到一块饼干。服务提供者A将创建一个本地(到A)会话,并删除一个带有会话ID(或任何会话指针)的cookie,以将用户代理与会话关联起来。在随后对A的请求中,A根据映射到A中会话的cookie知道您。会话保存已建立的认证上下文,例如,来自步骤1中SAML响应的用户“bee”的用户标识。

    也可以通过cookies(通常)。当您通过身份提供程序X进行身份验证时,它会发出自己的cookie。你有一块饼干给X,一块给A,一块给B。。。

    我们说“通常”是因为状态管理(A或X如何知道是你)不是SAML规范的一部分。如果一个身份提供商想出了一个奇特的状态管理方案,比如说,对你的浏览器进行指纹识别,并依赖该指纹作为你经过身份验证的上下文/会话标识,从协议的角度来看,SAML仍然可以。只有步骤1在协议中被正式描述,步骤2和3由实现决定。在实践中,cookie有一个非常短的替代列表,大多数应用程序使用cookie。

    看看SAML技术概述,它很好地解决了这个问题的本质

  •  类似资料:
    • 问题内容: 简短的问题: 我在.NET中有一个Web API服务,而一个站点仅由HTML和AngularJS组成。 如何仅对我的网站授权给我的服务? 我正在寻找一个似乎很常见但不是常见问题的安全答案。在最近的日子里,我读了很多答案,想法和各种各样的东西,但是找不到解决方案。 假设我有一个来自MS的Web Api服务(最新的)。所以我必须要消耗它的应用程序。让我们定义两个方案。 方案1: 在同一个I

    • 我的问题是,我们有一组运行SiteMinder但非常糟糕的遗留代码。它允许IIS匿名并避免使用Active Directory。 我们正在重建此应用程序,并希望将SiteMinder与IIS和集成。净额4.0。我知道我可以构建自己的安全框架,无需用户名和密码即可完成所有工作(因为我们不希望SiteMinder提供),但我想知道是否有办法使用内置的Windows身份验证(窗体或Windows)与Si

    • 我试图将spring oauth2(基于java的配置而不是引导)与angular 6集成, 我的WebSecurityConfigurerAdapter.java文件是: 我的身份验证提供程序是: 后端出现错误:

    • 我想检查https站点是否正在启动。我如何使用Perl LWP模块找到这个https站点的内容。我尝试了LWP::UserAgent模块,以获得重定向的URL 500 SSL协商失败。 注意:有重定向在此…其中最终的url是https而不是HTTP。

    • 如何在iOS8中使用CloudKit实现Sign sign-on? 我知道你可以得到一个代表你的登录用户的字符串,这是你的应用程序唯一的,但是我如何在我的后端验证那个字符串呢? 我明白Apple ID/iCloud电子邮件地址是出于隐私原因而隐藏的。 我的后端是Azure中的ASP.NET Web API2,但如果更简单的话,我可以用另一种技术实现它。 我正在寻找相当于谷歌在Android上的单点

    • 问题内容: 我遇到过许多教程,它们解释了如何使用node.js刮取不需要身份验证/登录的公共网站。 有人可以解释如何抓取需要使用node.js登录的网站吗? 问题答案: 使用Mikeal的请求库,您需要启用cookie支持,如下所示: 因此,您首先应该在该站点上(手动)创建一个用户名,并在向该站点发出POST请求时将用户名和密码作为参数传递。之后,服务器将使用Cookie进行响应,该请求将记住该C

    • CheckList 对于 PWA 站点是否完善,Google 通过 PWA 所需要具备的一些特性和最佳实践给出了一个 Checklist, 该 Checklist 从多个方面来提供 PWA 站点检测的标准。如果我们对 PWA 工程的检测要求集成到持续集成系统的话(类似后面所提到的 Lighthouse),我们可以参照 Checklist 进行一系列的检测。 Checklist: https://d