AADSTS75005: Запрос не является допустимым сообщением протокола Saml2. - PullRequest
0 голосов
/ 02 октября 2018

У меня есть реализация SAML, которая прекрасно работает с JumpCloud, OneLogin и другими поставщиками, однако интеграция с Microsoft Azure AD оказывается сложной.Мы получили ошибку

AADSTS75005: The request is not a valid Saml2 protocol message. 

Всякий раз, когда мы отправляем наши запросы.Я пробовал решения, упомянутые здесь и здесь , но ни одна из них не решает проблему для нас.

Мой код для создания запроса SAML, который открывается в новом окне черезнекоторый Javascript:

Using sw As StringWriter = New StringWriter()
    Dim xws As XmlWriterSettings = New XmlWriterSettings()
    xws.OmitXmlDeclaration = True

    Dim assertionUrl As String = "OUR URL"
    Dim issuer As String = "OUR ISSUER TEXT"
    dim id as string = "_" + System.Guid.NewGuid().ToString()
    dim issue_instant as string = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")

    Using xw As XmlWriter = XmlWriter.Create(sw, xws)
        xw.WriteStartElement("samlp", "AuthnRequest", "urn:oasis:names:tc:SAML:2.0:protocol")
        xw.WriteAttributeString("ID", id)
        xw.WriteAttributeString("Version", "2.0")
        xw.WriteAttributeString("IssueInstant", issue_instant)
        xw.WriteAttributeString("ProtocolBinding", "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST")
        xw.WriteAttributeString("AssertionConsumerServiceURL", assertionUrl)

        xw.WriteStartElement("saml", "Issuer", "urn:oasis:names:tc:SAML:2.0:assertion")
        xw.WriteString(issuer)
        xw.WriteEndElement()

        xw.WriteStartElement("samlp", "NameIDPolicy", "urn:oasis:names:tc:SAML:2.0:protocol")
        xw.WriteAttributeString("Format", "urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified")
        xw.WriteAttributeString("AllowCreate", "true")
        xw.WriteEndElement()

        xw.WriteStartElement("samlp", "RequestedAuthnContext", "urn:oasis:names:tc:SAML:2.0:protocol")
        xw.WriteAttributeString("Comparison", "exact")

        xw.WriteStartElement("saml", "AuthnContextClassRef", "urn:oasis:names:tc:SAML:2.0:assertion")
        xw.WriteString("urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport")
        xw.WriteEndElement()

        xw.WriteEndElement() ' RequestedAuthnContext

        xw.WriteEndElement()
    End Using

    If (format = AuthRequestFormat.Base64)
        Dim toEncodeAsBytes As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(sw.ToString())
        Return System.Convert.ToBase64String(toEncodeAsBytes)
    End If

    Return Nothing
End Using

Затем мы перенаправляем пользователя на: https://login.microsoftonline.com/OUR_APP_ID/saml2?SAMLRequest=, за которым следует закодированная строка

Я закодировал в base64 мой результат и прочитал его какнеобработанная строка и XML кажется мне действительным.Я даже зашел так далеко, что взял пример запроса от Azure AD и жестко запрограммировал мою реализацию с замененным издателем / instant / id и т. Д. Это наводит меня на мысль, что это проблема кодирования в моем запросе.Тем не менее, измененная кодировка в ответе Душиант Джилла также не решает мою проблему.

Я нашел другие сообщения на форуме, где другие поставщики программного обеспечения упоминали, что им приходилось вносить изменения в свои реализации SAML, когда их клиентыжаловались, что это не работает с Azure - однако мне еще предстоит выяснить, какое у них было разрешение.

1 Ответ

0 голосов
/ 03 октября 2018

Если вы используете привязку перенаправления HTTP (которая предлагается

Затем мы перенаправляем пользователя на

), тогда SAMLRequest должен быть закодирован с использованием DEFLATE.кодирование.Пожалуйста, смотрите раздел 3.4.4 http://docs.oasis -open.org / security / saml / v2.0 / saml-bindings-2.0-os.pdf

...