最近,我有一个新需求,我需要让用户在我的应用程序IDM SAP中进行身份验证。以前,我必须将应用程序与ADFS集成。 为了做到这一点,我使用了Ws Federation,并且该应用程序在Asp Net Core上运行。 使用ADFS的身份验证工作正常,在启动时,我让我的应用程序从Idp服务器检索元数据XML文件。然后,我将用户重定向到Idp登录页面,它验证身份验证是否有效,返回响应,然后打开我的应用程序。
现在,我已经进行了一些研究,以了解如何对IDM SAP进行同样的处理。当我看到将SAML与WS Federation比较的文章时,我有些困惑。令我更加困惑的是,客户端已经提供了他的xml元数据文件,它看起来与使用ADFS的另一个非常相似。
这是我实施Ws Federation的方式:
services
.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
options.Wtrealm = appSettings.Adfs.Wtrealm;
options.MetadataAddress = appSettings.Adfs.MetadataAddress;
options.RequireHttpsMetadata = false;
})
.AddCookie();
Idp URL位于我的appSettings文件中。
我想到我应该尝试读取本地文件夹中提供的这个新XML文件,但是此属性“ MetadataAddress”似乎总是只包含URL。 IDM Sap用户已经说过,他们不会公开其XML文件,因此我必须始终从本地xml文件读取。
它没有用,所以现在我试图确定我的选择是否是在我的应用程序中实现多个协议。
到目前为止,我发现该库似乎是解决方案 https://github.com/Sustainsys/Saml2/blob/master/Samples/SampleAspNetCore2ApplicationNETFramework/Startup.cs
尝试在StartUp方法上设置XML文件时遇到问题,这是我要尝试的:
.AddSaml2(options =>
{
options.SPOptions.EntityId = new EntityId("mine.metadata.xml");
options.IdentityProviders.Add(
new IdentityProvider(
new EntityId("mine.metadata.xml"), options.SPOptions)
{
LoadMetadata = true
});
options.SPOptions.ServiceCertificates.Add(new X509Certificate2(@"mine.metadata.xml"));
})
尝试设置服务证书时返回错误,提示它找不到指定的文件。
此外,让我们假装我设置了配置。我应该如何将用户重定向到IDM Sap登录页面?
任何人都可以提供一些建议或指导,以便我创建一个适用于两种情况的更好的解决方案吗?