【问题标题】:Correct AuthnRequest to Azure AD/idp将 AuthnRequest 更正为 Azure AD/idp
【发布时间】:2016-11-14 14:37:45
【问题描述】:

我不断收到“AADSTS75005:请求不是有效的 Saml2 协议消息”。当我尝试向 Azure AD/idp 发送 AuthnRequest 时。

在我压缩它之前,XML 看起来像这样,转换为 base64string 并对消息进行 url 编码。

<samlp:AuthnRequest xmlns="urn:oasis:names:tc:SAML:2.0:metadata" ID="ide13dd575-3f6c-4131-9b9d-e12c644cf18f" Version="2.0" IssueInstant="2016-11-14T14:28:27.5450323Z" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"><Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">{homepage url registered in azure app registrations}</Issuer></samlp:AuthnRequest>

用户正在被重定向到 https://login.microsoftonline.com/{SAML-P 登录端点从应用程序中的端点在 azure}/saml2?SAMLRequest={已删除编码的 saml 请求}

当我将它发送到另一个 SAML2 idp(使用 SimpleSAMLphp)时,同样有效

web浏览器将重定向到https://login.windows.net/ {端点ID} / SAML2?SAMLRequest = jZBLasMwFEW3YjRXbKny72EbAqVgaCkkbQedBEVWiKktuXrP%2faytgy6pW6hJhoXQ6YV7OPf%2bfH1XqMdhgvVMR7exr7NFij7GwWHN5uDAa%2bwRnB4tAhnYru9uQa4SGC3pTpNmUXtds77rrCjy9KB4LpXian%2bV8aJLUl6Wpdknytg0y1n0ZAP23tVsQSxNxNm2Dkk7WqJEZFwILtSDlCBSkHIlZCbLtHhmZyU4uV4Wm4Inb%2fzAmurED%2f9ZoxFtoMWMNUeiCSGOx8%2fHTbu78WG3JW1e7t9sOAz%2bvYrP1KaK%2fx7X%2fAI%3D P>

【问题讨论】:

  • 你是如何压缩它的?您是手动构建这个请求,还是使用第三方库来处理它?你能提供一个编码请求的样本吗?
  • 您提到了主页 URL,但这应该是应用程序 ID URI。确保这是正确的,如果正确,那么您提交请求的方式可能有问题。
  • Steve:我使用 DeflateStream(output, CompressionMode.Compress) 来压缩它。我正在手动构建请求,而不是使用任何库。将使用编码请求更新问题。 Juumas:我尝试过不同的 URI。应用程序 ID(只是一个 Guid),主页 URL(我猜这是发布身份验证响应的位置)。我刚刚发送的带有查询字符串参数的请求。

标签: azure saml-2.0


【解决方案1】:

正如上面已经提到的@Steve,问题似乎出在您对 AuthenticationRequest 放气/编码的方式上。尝试使用https://stackoverflow.com/a/25155050/983244 的示例代码,假设您使用的是 .NET(您提到了 DeflateStream)。

我还会清除命名空间声明,以便您的 AuthnRequest 看起来像

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
                    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
                    ID="ide13dd575-3f6c-4131-9b9d-e12c644cf18f"
                    Version="2.0" 
                    IssueInstant="2016-11-14T14:28:27.5450323Z">
    <saml:Issuer>{homepage url registered in azure app registrations}</saml:Issuer>
</samlp:AuthnRequest>

【讨论】:

  • 如果我使用在线解码器idp.ssocircle.com/sso/toolbox/samlDecode.jsp 并使用问题中的示例,它可以很好地解码,所以我认为它不应该与对请求的放气/编码...及其放气/编码方式与您提到的链接和我之前提到的相同。相同的代码适用于其他 SAML2 身份提供者。它可能是带有查询字符串参数名称的东西吗? ?SAMLRequest=xxx 我找不到有关参数名称的任何信息。如果更改参数名称,我会收到相同的错误消息..
【解决方案2】:

我发现了这个问题。我在新的 Azure 门户中创建了该应用程序。它显示端点为https://login.windows.net/{myid}/saml2

我在旧门户中创建了一个新应用,现在它显示端点为 https://login.microsoftonline.com/{myid}/saml2

如果我查看在旧门户中创建的两个应用程序(一个在新门户中,一个在旧门户中),它会显示 https://login.microsoftonline.com/{myid}/saml2

如果我在新门户中执行相同操作,它会在两个应用程序上显示 https://login.windows.net/{myid}/saml2。

所以我的代码没有任何错误,但 Azure AD 门户报告新门户中的端点无效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多