0

我正在尝试使用 ADFS 和 SAML2.0 在我们的 Web 应用程序中实现 SSO。我使用 Windows Server 2012 r2 作为我的 adfs 环境。Web 应用程序也在相同的环境中。

到目前为止,当我运行应用程序时,我被定向到主登录页面,我可以选择使用 sso 登录。单击 sso 选项后,我被重定向到 adfs 登录屏幕,当我尝试使用正确的凭据登录时,出现以下错误:

在联合被动请求期间遇到错误。

附加数据

协议名称:
萨姆勒

依赖方:
https://ADFSDomain/adfs/ls/

异常详情:
Microsoft.IdentityServer.Service.Policy.PolicyServer.Engine.MissingAssertionConsumerServicesPolicyException:MSIS3077:没有为信赖方信任“https://ADFSDomain/adfs/ls/”配置 AssertionConsumerServices 属性。
   在 Microsoft.IdentityServer.Service.SamlProtocol.EndpointResolver.LookupAssertionConsumerServiceByUrl(Collection`1 assertionConsumerServices,Uri 请求的AssertionConsumerServiceUrl,字符串范围标识)
   在 Microsoft.IdentityServer.Service.SamlProtocol.EndpointResolver.FindSamlResponseEndpointForAuthenticationRequest(Boolean artifactEnabled,AuthenticationRequest 请求,ScopeDescription scopeDescription)
   在 Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolManager.GetResponseEndpointFromRequest(SamlRequest 请求,布尔 isUrlTranslationNeeded,ScopeDescription 范围)
   在 Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolManager.Issue(HttpSamlRequestMessage httpSamlRequestMessage,SecurityTokenElement onBehalfOf,String sessionState,String relayState,String& newSamlSession,String& samlpAuthenticationProvider,Boolean isUrlTranslationNeeded,WrappedHttpListenerContext context,Boolean isKmsiRequested)
   在 Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.RequestBearerToken(WrappedHttpListenerContext 上下文,HttpSamlRequestMessage httpSamlRequest,SecurityTokenElement onBehalfOf,字符串依赖方标识符,布尔 isKmsiRequested,布尔 isApplicationProxyTokenRequired,字符串和 samlpSessionState,字符串和 samlpAuthenticationProvider)
   在 Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.BuildSignInResponseCoreWithSerializedToken(HttpSamlRequestMessage httpSamlRequest,WrappedHttpListenerContext 上下文,字符串依赖方标识符,SecurityTokenElement signOnTokenElement,布尔 isKmsiRequested,布尔 isApplicationProxyTokenRequired)
   在 Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.BuildSignInResponseCoreWithSecurityToken(SamlSignInContext 上下文、SecurityToken securityToken、SecurityToken deviceSecurityToken)
   在 Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.Process(ProtocolContext 上下文)
   在 Microsoft.IdentityServer.Web.PassiveProtocolListener.ProcessProtocolRequest(ProtocolContext 协议上下文,PassiveProtocolHandler 协议处理程序)
   在 Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext 上下文)

这是 web.config 的样子:

<sustainsys.saml2 modulePath="/AuthServices" entityId="https://ADFSDomain/adfs/ls/" returnUrl="http://localhost:2181/">
    <identityProviders>
      <add entityId="http://ADFSDomain/adfs/services/trust" 
           signOnUrl="https://ADFSDomain/adfs/ls/" 
           allowUnsolicitedAuthnResponse="true" 
           binding="HttpRedirect" 
           wantAuthnRequestsSigned="false"
           loadMetadata="true" 
           metadataLocation="https://ADFSDomain/federationmetadata/2007-06/federationmetadata.xml">
        <signingCertificate fileName="~/App_Data/newCert.cer" />
      </add>
    </identityProviders>
  </sustainsys.saml2>
4

1 回答 1

0

entityId您的配置中使用的应该是特定于您的服务提供商应用程序的路径,而不是 ADFS(身份提供商)。

一个示例配置:

<?xml version="1.0"?>
<sustainsys.saml2 entityId="https://yourdomain.com/apppath/Saml2" returnUrl="https://yourapp.com/apppath/" authenticateRequestSigningBehavior="Always" outboundSigningAlgorithm="SHA256">
   <identityProviders>
         <add entityId="http://adfs.yourdomain.com/adfs/services/trust" signOnUrl="https://adfs.yourdomain.com/adfs/ls" logoutUrl="https://adfs.yourdomain.com/adfs/ls" allowUnsolicitedAuthnResponse="true" binding="HttpRedirect" loadMetadata="true" metadataLocation="https://adfs.yourdomain.com/federationmetadata/2007-06/federationmetadata.xml" />
   </identityProviders>
   <serviceCertificates>
        <add storeName="My" storeLocation="LocalMachine" findValue="xxx" x509FindType="FindByThumbprint" />
   </serviceCertificates>
</sustainsys.saml2>
于 2018-04-06T17:14:02.073 回答