我想使用基于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值?
答案 0 :(得分: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是字典中的键,事情变得很混乱,稍后将被延迟初始化或更改。