2015-06-21 64 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 ...