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



我有一个SAML实现,它与JumpCloud、OneLogin和其他提供商配合良好,但与Microsoft Azure AD的集成很困难。我们收到错误

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

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

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

我发现了其他各种论坛帖子,其中其他软件供应商提到,当他们的客户抱怨SAML实现不适用于Azure时,他们不得不对SAML实现进行更改,但我还没有找到他们的解决方案。

如果使用HTTP重定向绑定(建议

然后我们将用户重定向到

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

相关内容

  • 没有找到相关文章

最新更新