gpt4 book ai didi

c# - 为什么这个 SAML 2.0 AuthnRequest 无效?

转载 作者:行者123 更新时间:2023-11-30 19:58:51 24 4
gpt4 key购买 nike

我有 C# 代码来生成 SAML 2.0 AuthnRequest:

String requestXML = "<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"https://saml.example.com/login\" Version=\"2.0\" IssueInstant=\"" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + "\" AssertionConsumerServiceIndex=\"0\"><saml:Issuer>https://saml.example.com/login</saml:Issuer><samlp:NameIDPolicy AllowCreate=\"true\" Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\"/></samlp:AuthnRequest>";
String convertedRequestXML = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(requestXML));
return Redirect("https://idp.ssocircle.com:443/sso/SSORedirect/metaAlias/ssocircle"+ "?SAMLRequest=" + convertedRequestXML + "&RelayState=" + HttpUtility.UrlEncode("/SamlLogin?ReturnUrl=" + returnurl));

使用我的实际域名而不是 example.com。我在 https://ssocircle.com/ 上设置了这个像这样的 SP 元数据

<md:EntityDescriptor
xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
entityID="https://saml.example.com/login">
<md:SPSSODescriptor
protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:AssertionConsumerService index="0"
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="https://saml.example.com/login" />
</md:SPSSODescriptor>
<md:Organization>
<md:OrganizationName xml:lang="en">
example
</md:OrganizationName>
<md:OrganizationDisplayName xml:lang="en">
example
</md:OrganizationDisplayName>
<md:OrganizationURL xml:lang="en">
http://www.example.com/
</md:OrganizationURL>
</md:Organization>

但是,页面返回:

Error occurred
Reason: The SAML Request is invalid.

毫无帮助,没有其他错误。我也尝试使用 https://openidp.feide.no 进行设置但这只返回了一个包含 500 服务器错误的空白页面。

我得到的字符串是

https://idp.ssocircle.com/sso/SSORedirect/metaAlias/ssocircle?SAMLRequest=PHNhbWxwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiBJRD0iaHR0cHM6Ly9zYW1sLmV4YW1wbGUuY29tL2xvZ2luIiBWZXJzaW9uPSIyLjAiIElzc3VlSW5zdGFudD0iMjAxNC0wOS0xMVQwOTozMTo1NyIgQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlSW5kZXg9IjAiPjxzYW1sOklzc3Vlcj5odHRwczovL3NhbWwuZXhhbXBsZS5jb20vbG9naW48L3NhbWw6SXNzdWVyPjxzYW1scDpOYW1lSURQb2xpY3kgQWxsb3dDcmVhdGU9InRydWUiIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6dHJhbnNpZW50Ii8+PC9zYW1scDpBdXRoblJlcXVlc3Q+&RelayState=%2fSamlLogin%3fReturnUrl%3d31lOpEvtWshJNDa314yOgw%3d%3d

哪个https://idp.ssocircle.com/sso/toolbox/samlDecode.jsp是“无法解码”和https://rnd.feide.no/simplesaml/module.php/saml2debug/debug.php出来了

<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="https://saml.example.com/login" Version="2.0" IssueInstant="2014-09-11T09:31:57" AssertionConsumerServiceIndex="0"><saml:Issuer>https://saml.example.com/login</saml:Issuer><samlp:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/��[[�]]��\]Y\�

我也试过类似的结果

String convertedRequestXML = System.Convert.ToBase64String(System.Text.UTF8Encoding.UTF8.GetBytes(requestXML));

我的问题是1) 我的 SAML AuthnRequest 真的有效吗?2)我的编码方式是否正确?3)有没有更好的工具可以用来调试这个?当出现问题时,这些网站不会给出任何有用的(或根本没有)错误消息

最佳答案

仅仅对请求进行 Base64 编码是不够的,您还需要做一些叫做 deflating 的事情。阅读有关 HTTP redirect binding 的章节.

在 C# 中有关于如何 defalte 的解释 here

关于c# - 为什么这个 SAML 2.0 AuthnRequest 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25775547/

24 4 0
文章推荐: c - 真的很奇怪,程序的调试工作正常,但当我运行它时,我得到一个奇怪的结果
文章推荐: C# 如何在其类型为 List 且我有一个 List 时设置 PropertyInfo 值