本教程演示如何让用户能够登录使用 WS 联合身份验证提供程序 (如 Active Directory 联合身份验证服务 (ADFS) 或Azure Active Directory (AAD)。 它使用 ASP.NET Core 2.0 示例应用程序中所述Facebook、 Google、 和外部提供程序身份验证。
对于 ASP.NET Core 2.0 应用程序中,WS 联合身份验证的支持由提供Microsoft.AspNetCore.Authentication.WsFederation。 此组件从移植Microsoft.Owin.Security.WsFederation和共享许多该组件的机制。 然而,组件的几个重要方面有所不同。
默认情况下,新的中间件:
AllowUnsolicitedLogins
选项。CallbackPath
将检查是否有登录接CallbackPath
默认值为/signin-wsfed
但可以更改通过继承RemoteAuthenticationOptions.CallbackPath属性WsFederationOptions类。 此路径可以与其他身份验证提供程序共享,从而SkipUnrecognizedRequests选项。输入有关信赖方的显示名称。 名称并不重要到 ASP.NET Core 应用程序。
Microsoft.AspNetCore.Authentication.WsFederation缺少对令牌加密,因此不配置令牌加密证书的支持:
备注
这必须是 HTTPS URL。 在开发期间承载应用程序时,IIS Express 可以提供自签名的证书。 Kestrel 要求手动证书配置。 请参阅Kestrel 文档的更多详细信息。
单击下一步完成向导的其余部分并关闭末尾。
ASP.NET Core 标识需要名称 ID声明。 添加一个从编辑声明规则对话框:
MetadataAddress
:Wtrealm
:添加 WS 联合身份验证到Startup.ConfigureServices
:
services.AddIdentity<IdentityUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); services.AddAuthentication() .AddWsFederation(options => { // MetadataAddress represents the Active Directory instance used to authenticate users. options.MetadataAddress = "https://<ADFS FQDN or AAD tenant>/FederationMetadata/2007-06/FederationMetadata.xml"; // Wtrealm is the app's identifier in the Active Directory instance. // For ADFS, use the relying party's identifier, its WS-Federation Passive protocol URL: options.Wtrealm = "https://localhost:44307/"; // For AAD, use the App ID URI from the app registration's Properties blade: options.Wtrealm = "https://wsfedsample.onmicrosoft.com/bf0e7e6d-056e-4e37-b9a6-2c36797b9f01"; }); services.AddMvc() // ...
AddAuthentication (字符串)重载设置DefaultScheme属性。 AddAuthentication (Action<AuthenticationOptions>)重载允许配置身份验证选项,这些选项可用于为不同目的设置默认的身份验证方案。 对的后续调用 AddAuthentication
重写以前配置的AuthenticationOptions属性。
对于注册身份验证处理程序的AuthenticationBuilder扩展方法,每个身份验证方案只能调用一次。 存在允许配置方案属性、方案名称和显示名称的重载。
浏览到应用程序并单击登录nav 标头中的链接。 提供了一个选项,能够使用 WsFederation 进行登录:
使用 ADFS 作为提供程序,该按钮将重定向到 ADFS 登录页:
使用 Azure Active Directory 作为提供程序,该按钮将重定向到 AAD 登录页:
在成功登录的新用户重定向到应用的用户注册页:
没有标识,可以使用 WS 联合身份验证中间件。 例如:
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(sharedOptions => { sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme; }) .AddWsFederation(options => { options.Wtrealm = Configuration["wsfed:realm"]; options.MetadataAddress = Configuration["wsfed:metadata"]; }) .AddCookie(); } public void Configure(IApplicationBuilder app) { app.UseAuthentication(); // … }