1

我想使用基于 Owin 的 SAML2 身份验证,而无需“硬编码”任何数据。我有来自 IdP 所有者的元数据文件。有什么办法,如何只加载这个文件(或指向带有元数据的 url)并让提供者初始化自己?

public void ConfigureAuth(IAppBuilder app)
{
    ...

    app.UseSaml2Authentication(CreateSaml2Options());
}


private static Saml2AuthenticationOptions CreateSaml2Options()
{
    var spOptions = CreateSpOptions();
    var saml2Options = new Saml2AuthenticationOptions(false)
    {
        SPOptions = spOptions
    };

    var idp = new IdentityProvider(new EntityId("XXXXXXXXX"), spOptions)
    {
        AllowUnsolicitedAuthnResponse = true,
        Binding = Saml2BindingType.HttpPost,
        SingleSignOnServiceUrl = new Uri("XXXXXXXXX")
    };

    saml2Options.IdentityProviders.Add(idp);

    return saml2Options;
}

如何从元数据中获取 XXXXXXXXX 值?

4

1 回答 1

1

XXX 是 EntityId,它列在元数据的顶部。考虑例如来自 stubidp.sustainsys.com 的元数据摘录:

<EntityDescriptor xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
ID="_a1f8bba0-9d9f-4107-bbed-b61cd3d9c67f" 
entityID="https://stubidp.sustainsys.com/Metadata" cacheDuration="PT15M"
validUntil="2018-12-19T18:51:08Z">
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
       <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

您要查找的 XXX 值是entityID属性。在这种情况下,它是https://stubidp.sustainsys.com/Metadata

在当前版本的库中,很遗憾无法从元数据中获取 EntityID。我计划在未来的版本中解决这个问题,但这需要大量的工作。原因是 EntityID 是字典中的键,事情会变得非常混乱,它会被延迟初始化或稍后更改。

于 2018-12-18T18:53:46.240 回答