如何查看STS / IDP的重定向状态
-
12-12-2019 - |
题
我已经搜索(概过,甚至)答案,但到目前为止没有任何有用的东西。我非常新的是ADF,STS的一般和WIF,所以请原谅任何明显的无知或术语不恰当使用。 ;)
我目前通过ADF将自定义MVC3应用程序集成,带有外部IDP。 adfs到IDP安装程序都完成并工作。
网站的某些部分可用于ANON用户 - 在Web.config身份验证模式下已设置为无。通过使用自定义System.Web.mvc.authorizeattribute的控制器/动作方法来保护其他部件。
已经制作了对web.config的所有常规修改都已制作了使用wsfederationauthenticationmodule,它工作95%;用户可以浏览到站点的Anon可访问部分。当他们尝试并击中受保护的零件时,授权属性检查它们是否在与httpContext.Current.User关联的IDP中的IDP中有一些自定义信息,然后将ActionResult设置为401,如果不是; WSFedErationAuthenticationModule踢出并将其重定向到IDP的登录页面。当他们输入他们的详细信息时,它们会成功重定向一些FedAuth Cookie和授权然后通过。
问题在进入IDP的登录页面时启动。这个特定的IDP有一个链接要将您直接返回到我们的网站(对原始请求的页面相同),使用此SAML响应嵌入某处(这根据他们的文档)
URN:OASIS:名称:TC:SAML:2.0:状态:authnfailed 在这一点上,它们现在“未经授权”,所有用户都会看到(至少在DEV中)是401页面。你必须杀死会话或以其他方式摆脱该cookie重新开始。
我需要做的是拦截从IDP重定向请求,基本上检查该特定的SAML状态,因为用户应该被重定向到未经授权的区域之一,就像发生的任何事情一样。我在global.asax中尝试了这样的东西:
protected void Application_Start()
{
// mvc stuff here....
// add handler to intercept handling creation of security tokens by WsFederationAuthnticationModule
FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;
}
void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
{
FederatedAuthentication
.WSFederationAuthenticationModule
.SessionSecurityTokenCreated += WSFederationAuthenticationModule_SecuityTokenCreated;
}
public void WSFederationAuthenticationModule_SecuityTokenCreated (Object sender, SessionSecurityTokenCreatedEventArgs args)
{
var token = args.SessionToken;
// do something with the session token here e.g. check for SAML status
}
.
..但我看不到任何有用的令牌;没有什么可以表明具体的响应状态。事实上,有一个fedauth cookie 在所有但没有自定义信息来自IDP是一个死者释放用户已经存在,但不知何故无法进行身份验证,但原则上我想要能够看那个状态。我可能不得不在IDP处理超时....
也许我做错了一切错误,或者只是普通的老老人不明白,但可以以某种方式填写我如何确定如何确定这些响应状态?
phew。谢谢! :d
解决方案
好的,所以我要回答自己的问题。
我可以从我的IDP中获得自定义状态的答案是否。 :(
但这只是因为adfs未设置以捕获它并将其传递。显然,您需要执行一些自定义编码,以从ADF和IDP之间打开的后频捕获信息....远远超出当前工作范围。
作为一瞬间的工作:
- 如果对网站进行了请求,并且没有SAML令牌,它由IDP的IDEN 未尝试的用户的新请求
- 如果有一个saml令牌,但令牌中的IDP没有ID(仅在正确呈现正确的IDP),那么用户因某种原因而失败了
- 如果存在id存在的saml令牌,则用户auth'd正确
不是很好但可接受的。顺便说一句,所有信用额为
YMC 在这个 so 帖子,这是以下代码的帖子,允许您检查SAML令牌:
.void WSFederationAuthenticationModule_SecurityTokenReceived(object sender, SecurityTokenReceivedEventArgs e) { var message = SignInResponseMessage.CreateFromFormPost(Request) as SignInResponseMessage; var rstr = new WSFederationSerializer() .CreateResponse(message, new WSTrustSerializationContext( SecurityTokenHandlerCollectionManager.CreateDefaultSecurityTokenHandlerCollectionManager())); }
pce!
- 如果存在id存在的saml令牌,则用户auth'd正确