使用SSO和ADFS2或用户名/密码的安全令牌服务?

时间:2014-05-20 18:17:42

标签: security asp.net-mvc-4 single-sign-on token ws-federation

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

1 个答案:

答案 0 :(得分:1)

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

这不是很复杂。你需要的是创建两个SignInRequestMessage并使用他们的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(或两个不同的uris),因此消费响应非常棘手。在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用户控制基础架构,但另一半是您正在寻找的)

不幸的是,只有联邦模块的配置才能轻松处理这种自定义混合场景。