У меня есть поставщик услуг SAML2, и я пытаюсь настроить единый вход с поставщиком удостоверений ADFS. В настоящее время мой поставщик услуг работает только с Okta и OneLogin. Когда они инициируют аутентификацию (отправляют мне ответное сообщение), она проходит успешно, но когда аутентификация инициируется с моей стороны (отправляя им сообщение AuthnRequest), ADFS выдает ошибку.
Я не могу определить почему и не очень хорошо знаком с ADFS. Журналы ошибок, предоставленные поставщиком удостоверений (анонимные), имеют это
Verbose,1/25/2019 8:37:10 AM,AD FS Tracing,70,None," Message after decoding: <?xml version=""1.0"" standalone=""yes""?>
<samlp:AuthnRequest xmlns:samlp=""urn:oasis:names:tc:SAML:2.0:protocol""
xmlns:saml=""urn:oasis:names:tc:SAML:2.0:assertion""
Destination=""https://exmaple.com/adfs/ls/""
ProviderName=""My SP's human readable name.""
AssertionConsumerServiceURL=""https://www.example.com/login/saml2/1234567/authenticate""
Version=""2.0""
IssueInstant=""2019-01-25T16:37:08Z""
ID=""IDcbe874446fa31fcb9c3f5868beab546b"">
<saml:Issuer>https://www.example.com</saml:Issuer>
<samlp:NameIDPolicy Format=""transient"" AllowCreate=""1"" />
</samlp:AuthnRequest>"
Error,1/25/2019 8:37:10 AM,AD FS Tracing,153,None,"Exception: MSIS0018: The SAML protocol message cannot be read because it contains data that is not valid.
StackTrace: at Microsoft.IdentityServer.Protocols.Saml.SamlProtocolSerializer.ReadNameIDPolicy(XmlReader reader)
at Microsoft.IdentityServer.Protocols.Saml.SamlProtocolSerializer.ReadAuthnRequest(XmlReader reader)
at Microsoft.IdentityServer.Protocols.Saml.HttpSamlBindingSerializer.ReadProtocolMessage(String encodedSamlMessage)
at Microsoft.IdentityServer.Protocols.Saml.HttpSamlBindingSerializer.CreateFromNameValueCollection(Uri baseUrl, NameValueCollection collection)
at Microsoft.IdentityServer.Protocols.Saml.HttpRedirectSamlBindingSerializer.ReadMessage(Uri requestUrl, NameValueCollection form)
at Microsoft.IdentityServer.Web.Protocols.Saml.HttpSamlMessageFactory.CreateMessage(WrappedHttpListenerRequest httpRequest)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlContextFactory.CreateProtocolContextFromRequest(WrappedHttpListenerRequest request, ProtocolContext& protocolContext)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.CreateProtocolContext(WrappedHttpListenerRequest request)
at Microsoft.IdentityServer.Web.PassiveProtocolListener.GetProtocolHandler(WrappedHttpListenerRequest request, ProtocolContext& protocolContext, PassiveProtocolHandler& protocolHandler)
at Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext context)
Exception: Invalid URI: The format of the URI could not be determined.
StackTrace: at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
at Microsoft.IdentityServer.Protocols.Saml.SamlProtocolSerializer.ReadNameIDPolicy(XmlReader reader)
"
Error,1/25/2019 8:37:10 AM,AD FS Tracing,87,None,Passive pipeline error
Я не уверен, являются ли две трассировки стека разными ошибками или связаны.
Мой провайдер услуг использует слегка измененную версию модуля Perl Net :: SAML2.
Я надеюсь, что это всего лишь какой-то атрибут или элемент, которого ожидает ADFS, но я не предоставляю, или еще лучше, что на их стороне есть некорректная конфигурация.
Что может вызвать эту ошибку?
Я считаю, что мы должны отправить urn:oasis:names:tc:SAML:2.0:nameid-format:transient
вместо того transient
в качестве атрибута формата NameIDPolicy. Допустимые значения для Format приведены в разделе 8.3. основная спецификация SAML2.