Owin - 使用元数据初始化 IdP file/url

Owin - Initialize IdP using metadata file/url

我想在没有 "hardcoding" 任何数据的情况下使用基于 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 值?

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 是字典中的键,事情会变得非常混乱,它会被延迟初始化或稍后更改。