使用 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 管理控制台:

添加信赖方信任向导:欢迎使用

  • 选择手动输入数据:

添加信赖方信任向导:选择数据源

添加信赖方信任向导:配置证书

  • 启用支持 WS 联合身份验证被动协议,使用应用的 URL。 确认端口正确,应用程序:

添加信赖方信任向导:配置 URL

备注

这必须是 HTTPS URL。 在开发期间承载应用程序时,IIS Express 可以提供自签名的证书。 Kestrel 要求手动证书配置。 请参阅Kestrel 文档的更多详细信息。

  • 单击下一步完成向导的其余部分并关闭末尾。

  • ASP.NET Core 标识需要名称 ID声明。 添加一个从编辑声明规则对话框:

编辑声明规则

  • 在中添加转换声明规则向导,保留默认以声明方式发送 LDAP 属性模板选择,然后单击下一步 添加规则映射SAM 帐户名LDAP 属性到名称 ID传出声明:

添加转换声明规则向导:配置声明规则

  • 单击完成 > 确定编辑声明规则窗口。

Azure Active Directory

  • 导航到 AAD 租户的应用注册边栏选项卡。 单击新建应用程序注册:

Azure Active Directory:应用注册

  • 输入应用注册的名称。 这并不重要到 ASP.NET Core 应用程序。
  • 输入应用程序以侦听的 URL单一登录 URL:

Azure Active Directory:创建应用程序注册

  • 单击终结点并记下联合身份验证元数据文档URL。 这是 WS 联合身份验证中间件的MetadataAddress:

Azure Active Directory:终结点

  • 导航到新的应用注册。 单击设置 > 属性并记下应用程序 ID URI 这是 WS 联合身份验证中间件的Wtrealm:

Azure Active Directory:应用程序注册属性

为 ASP.NET Core 标识的外部登录提供程序中添加 WS 联合身份验证

  • 添加一个依赖项Microsoft.AspNetCore.Authentication.WsFederation到项目。

  • 添加 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 登录页:ADFS 登录页

使用 Azure Active Directory 作为提供程序,该按钮将重定向到 AAD 登录页: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();
        // …
}

上一篇:ASP.NET Core 中的策略方案

下一篇:帐户确认和 ASP.NET Core 中的密码恢复

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程