0

我目前有一个 MVC4 自主开发的安全令牌服务 (STS),它与我们自己的身份验证数据库进行通信。使用此设置一切正常。作为一项新功能,我需要为域上的用户添加通过 ADFS2 进行单点登录 (SSO) 的功能(绕过当前的 un/pw 屏幕,他们只是“进入”)。需要明确的是,确实需要处理 3 种不同的登录可能性:域用户 (SSO)、域凭据(域用户不在域上输入其域 un/pw)以及来自数据库的原始 un/pw 身份验证。知道我知道如何将 web.config 设置添加到依赖应用程序以连接 STS,我将如何连接两个 wsFederation 被动重定向选项(当前重定向到 STS 用于 un/pw,以及 ADFS 选项)?这是必须在代码中处理的东西吗?通过 WSFederationAuthenticationModule 等重载类?处理我想要的最好的方法是什么?任何代码示例?谢谢你的时间!

4

1 回答 1

1

您只需在自定义 STS 上拥有登录屏幕和两个附加按钮,“使用 ADFS 登录”或“以域用户身份登录”。这两个按钮都重定向到与您的 STS 联合的另外两个 STS(您的 STS 扮演身份提供 STS 或依赖 STS 的角色)。

这不是很复杂。您需要的是创建两个SignInRequestMessages 并使用它们WriteQueryString构建两个 url 到两个不同的 STS。另一种方法是使用该WSFederationAuthenticationModule::CreateSignInRequest方法。

http://msdn.microsoft.com/en-us/library/system.identitymodel.services.signinrequestmessage(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/system.identitymodel.services.wsfederationauthenticationmodule.createsigninrequest(v=vs.110).aspx

消费响应比较棘手,因为您需要一个 uri(或两个不同的 uri)来扮演端点角色。在 uri 中,您需要一个令牌接收器并尝试从提供者发送的 SAML 中创建一个令牌。

如果你偷看wif:FederatedPassiveSignIn我曾经写过的方法的社区替换的来源,你就会明白

http://code.google.com/p/net45federatedpassivesignin/source/browse/trunk/+net45federatedpassivesignin+--username+wzychla@gmail.com/Community.IdentityModel.Web/Controls/CommunityFederatedPassiveSignIn.cs?spec=svn6&r=6

(至少一半的代码负责 WebForms 用户控制基础设施,但另一半是您正在寻找的)

不幸的是,这种自定义混合场景仅通过联邦模块的配置并不容易处理。

于 2014-05-20T18:36:09.093 回答