1

更新

我发现,如果我将受信任的证书添加到SPOptions.ServiceCertificates并设置SPOptions.AuthenticateRequestSigningBehavior = Sustainsys.Saml2.Configuration.SigningBehavior.IfIdpWantAuthnRequestsSigned;和设置IdentityProvider.WantAuthnRequestsSigned = true,则包含签名元素。


原始问题:

连接到 IDP 时遇到以下问题AuthnRequest

<saml2p:AuthnRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="idf299bf8aa08542d193e022cb047e5ecc" Version="2.0" IssueInstant="2019-07-23T00:10:13Z" Destination="https://example-idp.com" AssertionConsumerServiceURL="https://example-sp.com/Acs">
<saml2:Issuer>https://example-sp.com</saml2:Issuer>
</saml2p:AuthnRequest>

IDP 说:"SignatureStatus: NOT_PRESENT"。我猜这意味着authnrequest应该有一个<ds:Signature部分?如果是这样,我如何配置Sustainsys.Saml2.AspNetCore2以包含它?

我从 idp 收到的元数据 xml 包含一个<ds:Signature部分,但是查看源代码Sustainsys.Saml2.AspNetCore2,看起来在反序列化时元数据的那部分被忽略了?

我对 SAML 的内部结构不是很熟悉,如果这是一个愚蠢的问题,我很抱歉。

4

1 回答 1

1

您需要生成一个包含公共证书和私钥的自签名 .pfx 文件。我们使用 azure key vault,但您也可以使用 openssl。许多资源解释了如何生成其中之一并将其加载到 ac#X509Certificate2实例中。

一旦你有一个实例X509Certificate2,设置options.SPOptions.AuthenticateRequestSigningBehavior = Sustainsys.Saml2.Configuration.SigningBehavior.IfIdpWantAuthnRequestsSigned;

并设置IdentityProvider.WantAuthnRequestsSigned = true

然后像这样添加X509Certificate2实例:options.SPOptions.ServiceCertificates.Add(myX509Certificate2);

然后运行您的应用程序并启动 SAML SSO 流程。您可以使用 hookbin 等查看它在AuthnRequestfor中发送的内容SAMLRequest。您可以通过 url 解码从中提取 xml,然后像在 javascript 中那样对其进行 base64 解码,例如确认签名 xml 已设置并正确:atob(decodeURIComponent(samlRequestValue))

于 2019-07-23T20:57:37.510 回答