AADSTS75005:该请求不是有效的Saml2协议消息。

时间:2018-10-02 10:30:44

标签: azure azure-active-directory saml-2.0

我有一个SAML实现,可以与JumpCloud,OneLogin和其他提供程序很好地兼容,但是事实证明与Microsoft Azure AD集成非常困难。我们收到了错误

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

每当我们发送请求时。我已经尝试过herehere中提到的解决方案,但都没有为我们解决问题。

用于创建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中的Request示例为例,并用替换的issuer / instant / id等对我的实现进行了硬编码。这使我相信这是我的请求中的编码问题。但是,Dushyant Gill答案中更改的编码也无法解决我的问题。

我发现了许多其他论坛帖子,其他软件供应商都提到,当客户抱怨其不适用于Azure时,他们不得不对SAML实施应用更改-但是我还没有找到什么他们的决议是。

1 个答案:

答案 0 :(得分:1)

如果您使用的是HTTP重定向绑定(建议由

  

然后我们将用户重定向到

),则必须使用DEFLATE编码对SAMLRequest进行编码。请参阅http://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf

的3.4.4节