adfs выдает ошибку в сообщении authnrequest
У меня есть поставщик услуг 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, но я не предоставляю, или еще лучше, что есть некоторая конфигурация на их стороне, которая является неправильной.
Что может вызвать эту ошибку?
1 ответ
Я считаю, что мы должны отправить urn:oasis:names:tc:SAML:2.0:nameid-format:transient
вместо transient
в качестве атрибута формата NameIDPolicy. Допустимые значения для формата приведены в разделе 8.3 основной спецификации SAML2.