我已经搜索(概过,甚至)答案,但到目前为止没有任何有用的东西。我非常新的是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!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top