所以这里是设置。我有一个 STS 提供程序和 2 个 ASP.NET MVC 站点都信任同一个 STS 提供程序。用户来到站点 A 并被重定向到 STS 提供者被动登录,正确地进行身份验证,并按预期重定向回站点“A”。这一切都很好。我可以使用以下命令在站点“A”的代码中查看令牌和身份:
IClaimsPrincipal claimsPrincipal = Thread.CurrentPrincipal as IClaimsPrincipal;
IClaimsIdentity claimsIdentity = (IClaimsIdentity)claimsPrincipal.Identity;
现在站点“A”上有一个链接到站点“B”,该链接支持相同的STS 提供者。问题是当我导航到站点“B”时,声明信息不存在,并且用户未自动进行身份验证。根据 STS 和 WIF 文档,应发生以下情况:
“流程照常开始,用户从站点 A 上的 B 请求页面并被重定向到 STS 以获取令牌。但是,这次用户已经通过 STS 站点进行了身份验证,因为存在由STS cookie。这意味着对 STS 页面的请求直接导致 SecurityTokenService 发布序列的执行,而不向用户显示任何用于收集凭据的 UI。令牌被静默发布并转发给 B按照通常的顺序。从用户点击到 B 的链接并且浏览器显示来自 B 的请求页面的那一刻起,只有浏览器中地址栏的一些闪烁会泄露一些身份验证发生在幕后的事实。这几乎就是单点登录 (SSO) 的含义:用户经历了仅登录一次的体验,从那一刻起,系统就能够访问更多可靠方,而无需再次提示用户输入凭据。”
有谁知道在 STS 提供者、站点 A 或站点 B 中明确需要发生什么才能使其正常工作?请记住 STS 和站点“A”运行良好;只是站点“B”没有获得 SSO 能力。
谢谢!