AADSTS75005:请求不是有效的 Saml2 协议消息。
AADSTS75005: The request is not a valid Saml2 protocol message.
我有一个 SAML 实现,它可以与 JumpCloud、OneLogin 和其他提供商一起正常工作,但事实证明与 Microsoft Azure AD 的集成很困难。我们收到错误
AADSTS75005: The request is not a valid Saml2 protocol message.
每当我们发送请求时。我已经尝试了提到的解决方案 here and 但都没有解决我们的问题。
我创建 SAML 请求的代码是:
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 的示例请求,并将我的实现硬编码到该请求,并替换了 issuer/instant/id 等。这让我相信这是我请求中的编码问题。但是,Dushyant Gill 的回答中更改的编码也没有解决我的问题。
我在其他各种论坛帖子中发现,其他软件供应商提到,当他们的客户抱怨 SAML 实施不适用于 Azure 时,他们不得不对他们的 SAML 实施进行更改 - 但我还没有这样做找出他们的决心。
如果您正在使用 HTTP 重定向绑定(
建议
We then redirect the user to
) ,则必须使用 DEFLATE 编码对 SAMLRequest 进行编码。请参阅 http://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf
的第 3.4.4 节
我有一个 SAML 实现,它可以与 JumpCloud、OneLogin 和其他提供商一起正常工作,但事实证明与 Microsoft Azure AD 的集成很困难。我们收到错误
AADSTS75005: The request is not a valid Saml2 protocol message.
每当我们发送请求时。我已经尝试了提到的解决方案 here and
我创建 SAML 请求的代码是:
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 的示例请求,并将我的实现硬编码到该请求,并替换了 issuer/instant/id 等。这让我相信这是我请求中的编码问题。但是,Dushyant Gill 的回答中更改的编码也没有解决我的问题。
我在其他各种论坛帖子中发现,其他软件供应商提到,当他们的客户抱怨 SAML 实施不适用于 Azure 时,他们不得不对他们的 SAML 实施进行更改 - 但我还没有这样做找出他们的决心。
如果您正在使用 HTTP 重定向绑定(
建议We then redirect the user to
) ,则必须使用 DEFLATE 编码对 SAMLRequest 进行编码。请参阅 http://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf
的第 3.4.4 节