将 AuthnRequest 更正为 Azure AD/idp
Correct AuthnRequest to Azure AD/idp
当我尝试向 Azure AD/idp 发送 AuthnRequest 时,我不断收到 "AADSTS75005: The request is not a valid Saml2 protocol message."。
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/{从 Azure 应用中的端点的 SAML-P 登录端点}/saml2?SAMLRequest={已删除编码的 saml 请求}
当我将它发送到另一个 SAML2 idp(使用 SimpleSAMLphp)时同样有效
the web browser will be redirect to https://login.windows.net/{endpoint id}/saml2?SAMLRequest=jZBLasMwFEW3YjRXbKny72EbAqVgaCkkbQedBEVWiKktuXrP%2faytgy6pW6hJhoXQ6YV7OPf%2bfH1XqMdhgvVMR7exr7NFij7GwWHN5uDAa%2bwRnB4tAhnYru9uQa4SGC3pTpNmUXtds77rrCjy9KB4LpXian%2bV8aJLUl6Wpdknytg0y1n0ZAP23tVsQSxNxNm2Dkk7WqJEZFwILtSDlCBSkHIlZCbLtHhmZyU4uV4Wm4Inb%2fzAmurED%2f9ZoxFtoMWMNUeiCSGOx8%2fHTbu78WG3JW1e7t9sOAz%2bvYrP1KaK%2fx7X%2fAI%3d
正如@Steve 上面已经提到的,问题似乎出在您 deflating/encoding AuthenticationRequest 的方式上。假设您使用的是 .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>
我发现了这个问题。我在新的 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 门户报告新门户中的无效端点。
当我尝试向 Azure AD/idp 发送 AuthnRequest 时,我不断收到 "AADSTS75005: The request is not a valid Saml2 protocol message."。
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/{从 Azure 应用中的端点的 SAML-P 登录端点}/saml2?SAMLRequest={已删除编码的 saml 请求}
当我将它发送到另一个 SAML2 idp(使用 SimpleSAMLphp)时同样有效
the web browser will be redirect to https://login.windows.net/{endpoint id}/saml2?SAMLRequest=jZBLasMwFEW3YjRXbKny72EbAqVgaCkkbQedBEVWiKktuXrP%2faytgy6pW6hJhoXQ6YV7OPf%2bfH1XqMdhgvVMR7exr7NFij7GwWHN5uDAa%2bwRnB4tAhnYru9uQa4SGC3pTpNmUXtds77rrCjy9KB4LpXian%2bV8aJLUl6Wpdknytg0y1n0ZAP23tVsQSxNxNm2Dkk7WqJEZFwILtSDlCBSkHIlZCbLtHhmZyU4uV4Wm4Inb%2fzAmurED%2f9ZoxFtoMWMNUeiCSGOx8%2fHTbu78WG3JW1e7t9sOAz%2bvYrP1KaK%2fx7X%2fAI%3d
正如@Steve 上面已经提到的,问题似乎出在您 deflating/encoding AuthenticationRequest 的方式上。假设您使用的是 .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>
我发现了这个问题。我在新的 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 门户报告新门户中的无效端点。