WS 联合身份验证

使用 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();
        // …
}
目录