我正在尝试使用 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>