我目前有一个MVC4自己开发的安全令牌服务(STS),它可以与我们自己的身份验证数据库进行通信。在这种设置下,一切都运行得很好。作为一个新的功能,我需要添加单点登录(单点登录)的能力,通过ADFS2的那些用户是在域(绕过当前的联合国/pw屏幕,他们只是‘在’)。需要明确的是,实际上有3种不同的登录可能性需要处理:域用户(SSO)、域凭证(域用户不在域中进入其域un/pw)和来自数据库的原始un/pw身份验证。知道我知道如何将web.config设置添加到依赖应用程序以连接STS,我将如何连接两个wsFederation被动重定向选项(当前重定向到STS以用于un/pw和ADFS选项)?这是不是必须在代码中通过重载的类(如WSFederationAuthenticationModule )来处理?处理我想要的东西最好的方法是什么?有什么代码示例吗?耽误您时间,实在对不起!
发布于 2014-05-21 02:36:09
您只需要在自定义STS上显示登录屏幕和两个额外的按钮,即"login with ADFS“或"login as domain user”。这两个按钮都是重定向到与你的STS联合的另外两个STSes (然后你的STS扮演身份提供STS或依赖STS的角色)。
这并不是很复杂。您需要做的是创建两个SignInRequestMessage
,并使用它们的WriteQueryString
构建两个指向两个不同STSes的urls。另一种方法是使用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用户控制基础设施,但另一半就是您想要的)
同样不幸的是,仅使用联合模块的配置并不能轻松处理这样的自定义混合场景。
https://stackoverflow.com/questions/23767128
复制相似问题