最近我有一个新需求,我需要让用户在我的应用程序 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 登录页面?
任何人都可以提供一些建议或指导,以便我可以创建一个适用于这两种情况的更好的解决方案吗?