- 通用
- 身份验证
- 授权
- 数据保护
- 机密管理
使用 WS 联合身份验证在 ASP.NET Core 中的用户进行身份验证
本教程演示如何让用户能够登录使用 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和共享许多该组件的机制。 然而,组件的几个重要方面有所不同。
默认情况下,新的中间件:
- 不允许未经请求的登录名。 WS 联合身份验证协议的这一功能很容易 XSRF 攻击。 但是,可以使用启用此
AllowUnsolicitedLogins
选项。 - 不会检查每个窗体发布的登录消息。 仅向请求
CallbackPath
将检查是否有登录接CallbackPath
默认值为/signin-wsfed
但可以更改通过继承RemoteAuthenticationOptions.CallbackPath属性WsFederationOptions类。 此路径可以与其他身份验证提供程序共享,从而SkipUnrecognizedRequests选项。
与 Active Directory 中注册应用程序
Active Directory 联合身份验证服务
- 打开服务器的添加信赖方信任向导从 ADFS 管理控制台:
- 选择手动输入数据:
输入有关信赖方的显示名称。 名称并不重要到 ASP.NET Core 应用程序。
Microsoft.AspNetCore.Authentication.WsFederation缺少对令牌加密,因此不配置令牌加密证书的支持:
- 启用支持 WS 联合身份验证被动协议,使用应用的 URL。 确认端口正确,应用程序:
备注
这必须是 HTTPS URL。 在开发期间承载应用程序时,IIS Express 可以提供自签名的证书。 Kestrel 要求手动证书配置。 请参阅Kestrel 文档的更多详细信息。
单击下一步完成向导的其余部分并关闭末尾。
ASP.NET Core 标识需要名称 ID声明。 添加一个从编辑声明规则对话框:
- 在中添加转换声明规则向导,保留默认以声明方式发送 LDAP 属性模板选择,然后单击下一步。 添加规则映射SAM 帐户名LDAP 属性到名称 ID传出声明:
- 单击完成 > 确定中编辑声明规则窗口。
Azure Active Directory
- 导航到 AAD 租户的应用注册边栏选项卡。 单击新建应用程序注册:
- 输入应用注册的名称。 这并不重要到 ASP.NET Core 应用程序。
- 输入应用程序以侦听的 URL单一登录 URL:
- 单击终结点并记下联合身份验证元数据文档URL。 这是 WS 联合身份验证中间件的
MetadataAddress
:
- 导航到新的应用注册。 单击设置 > 属性并记下应用程序 ID URI。 这是 WS 联合身份验证中间件的
Wtrealm
:
为 ASP.NET Core 标识的外部登录提供程序中添加 WS 联合身份验证
添加 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扩展方法,每个身份验证方案只能调用一次。 存在允许配置方案属性、方案名称和显示名称的重载。
使用 WS 联合身份验证登录
浏览到应用程序并单击登录nav 标头中的链接。 提供了一个选项,能够使用 WsFederation 进行登录:
使用 ADFS 作为提供程序,该按钮将重定向到 ADFS 登录页:
使用 Azure Active Directory 作为提供程序,该按钮将重定向到 AAD 登录页:
在成功登录的新用户重定向到应用的用户注册页:
使用 WS 联合身份验证而无需 ASP.NET Core 标识
没有标识,可以使用 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(); // … }