2015-06-21 150 views
1

我们的Java应用程序与客户ADFS 3.0服务器联合。 通过SAMLP将身份验证请求(SP启动)发送到ADFS服务器后发生问题。 这是内部网用例,其中在身份验证策略中的ADFS服务器上指定了Windows身份验证。 SP应用程序使用ForgeRock的Fedlet添加库被强制发送RequestedAuthnContext属性withing SAML认证请求:STS不支持所请求的身份验证方法

samlp:RequestedAuthnContext xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
          Comparison="exact" 
          > 
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef> 
</samlp:RequestedAuthnContext> 

我们最初也与外联网验证,即在ADFS选择窗体身份验证问题。我们已经解决了为我们的RP添加索赔自定义规则:

exists([Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"]) => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "urn:oasis:names:tc:SAML:2.0:ac:classes:Password"); 

现在我们用intranet用例堆放下来。 在ADFS方面,我们得到了以下错误:

MSIS7102: Requested Authentication Method is not supported on the STS. 
    at Microsoft.IdentityServer.Web.Authentication.GlobalAuthenticationPolicyEvaluator.EvaluatePolicy(IList`1 mappedRequestedAuthMethods, AccessLocation location, ProtocolContext context, HashSet`1 authMethodsInToken, Boolean& validAuthMethodsInToken) 
    at Microsoft.IdentityServer.Web.Authentication.AuthenticationPolicyEvaluator.RetrieveFirstStageAuthenticationDomain(Boolean& validAuthMethodsInToken) 
    at Microsoft.IdentityServer.Web.Authentication.AuthenticationPolicyEvaluator.EvaluatePolicy(Boolean& isLastStage, AuthenticationStage& currentStage, Boolean& strongAuthRequried) 
    at Microsoft.IdentityServer.Web.PassiveProtocolListener.GetAuthMethodsFromAuthPolicyRules(PassiveProtocolHandler protocolHandler, ProtocolContext protocolContext) 
    at Microsoft.IdentityServer.Web.PassiveProtocolListener.GetAuthenticationMethods(PassiveProtocolHandler protocolHandler, ProtocolContext protocolContext) 
    at Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext context) 

我能添加/做些什么呢?有没有可能在自定义规则中说如果它是内部的,AUTH方法是WINDOWS或类似的东西?

回答

1

我们已经通过发送多个验证选项,并指定比较解决了这个最低

<samlp:RequestedAuthnContext xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
          Comparison="minimum" 
          > 
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef> 
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef> 
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef> 
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos</saml:AuthnContextClassRef> 
    <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:federation:authentication:windows</saml:AuthnContextClassRef> 
</samlp:RequestedAuthnContext> 
2

你总是可以试试authnContextClassRef="urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified",这应该让IdP选择它可以使用的任何东西。作为SP,你真的不知道(你应该关心?),这方法可用到的IDP ...