作者:Valeriy Novytskyy 和 Rick Anderson
此示例演示如何让用户使用在 上一页上创建的 ASP.NET Core 项目使用其工作、学校或个人Microsoft帐户登录。
在 Microsoft Entra 管理中心中创建应用
- 将 Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet 包添加到项目中。
- 按照Microsoft标识平台注册应用程序的步骤,在 Microsoft Entra 管理中心注册应用程序
创建客户端机密
按照 在 Microsoft 标识平台注册应用程序:添加凭据 的步骤,在 Microsoft Entra 管理中心生成客户端密钥。
存储Microsoft客户端 ID 和机密
存储使用机密管理器在上一步中创建的敏感设置,例如Microsoft应用程序(客户端)ID 和客户端密码。 对于此示例,请使用以下步骤:
按照启用机密存储中的说明初始化项目以启用机密存储。
使用密钥
Authentication:Microsoft:ClientId和Authentication:Microsoft:ClientSecret将敏感设置存储在本地机密存储中。<client-id>显示在 Azure 应用注册页的“应用程序(客户端)ID”下。<client-secret>显示在“证书和机密”下,作为值字段,而不是密钥 ID。dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
: 分隔符不适用于所有平台上的环境变量分层键。 例如,: 不支持 分隔符。 __(双下划线):
- 所有平台都支持。
- 自动替换为冒号,即
:。
配置Microsoft帐户身份验证
将身份验证服务添加到 Program:
builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});
AddAuthentication(IServiceCollection, String) 重载设置 DefaultScheme 属性。 AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) 重载允许配置身份验证选项,这些选项可用于为不同的目的设置默认身份验证方案。 对 AddAuthentication 的后续调用将替代以前配置的 AuthenticationOptions 属性。
注册身份验证处理程序的 AuthenticationBuilder 扩展方法只能在每个身份验证方案中调用一次。 存在允许配置方案属性、方案名称和显示名称的重载。
有关Microsoft帐户身份验证支持的配置选项的详细信息,请参阅 MicrosoftAccountOptions API 参考。 这可用于请求有关用户的不同信息。
使用 Microsoft 帐户登录
- 运行应用并选择 “登录”。 将显示一个使用Microsoft登录的选项。
- 选择使用Microsoft登录,以导航到Microsoft进行身份验证。 使用 Microsoft 帐户登录后,系统会提示应用访问你的信息:
- 选择 “是 ”,导航回要设置电子邮件的网站。
现在,你已使用Microsoft凭据登录。
若要使用多个身份验证提供程序,请参阅在 ASP.NET Core 中使用外部登录提供程序Identity。
使用代理或负载均衡器转发请求信息
如果应用程序部署在代理服务器或负载均衡器后面,某些原始请求信息可能会通过请求头转发到应用程序。 此信息通常包括安全请求方案 (https)、主机和客户端 IP 地址。 应用不会自动读取这些请求标头以发现和使用原始请求信息。
该方案用于生成会影响与外部提供商的身份验证流程的链接。 丢失安全方案 (https) 会导致应用生成不正确且不安全的重定向 URL。
使用转发标头中间件以使应用可以使用原始请求信息来进行请求处理。
有关详细信息,请参阅配置 ASP.NET Core 以使用代理服务器和负载均衡器。
故障排除
如果 Microsoft 帐户提供程序重定向到登录错误页面,请注意 URI 中
#(井号标签)后面的错误标题和描述查询字符串参数。尽管错误消息似乎表明Microsoft身份验证出现问题,但最常见的原因是应用程序 URI 与为 Web 平台指定的任何重定向 URI 不匹配。
如果Identity未通过在
ConfigureServices中调用services.AddIdentity进行配置,则尝试进行身份验证时将导致ArgumentException:必须提供“SignInScheme”选项。 此示例中使用的项目模板可确保完成此作。如果尚未通过应用初始迁移来创建站点数据库,则会出现数据库操作失败错误。 点击应用迁移以创建数据库并刷新以继续以跳过错误。
后续步骤
- 本文介绍了如何使用Microsoft进行身份验证。 按照类似的方法对 上一页上列出的其他提供程序进行身份验证。
- 将网站发布到 Azure Web 应用后,请在 Microsoft Entra 管理中心创建新的客户端密码。
- 在 Microsoft Entra 管理中心中,将
Authentication:Microsoft:ClientId和Authentication:Microsoft:ClientSecret设置为应用程序设置。 配置系统设置为从环境变量读取密钥。
此示例演示如何使用在 上一页上创建的 ASP.NET Core 3.0 项目,让用户使用其工作、学校或个人Microsoft帐户登录。
在 Microsoft Entra 管理中心中创建应用
- 将 Microsoft.AspNetCore.Authentication.MicrosoftAccount NuGet 包添加到项目中。
- 按照Microsoft标识平台注册应用程序的步骤,在 Microsoft Entra 管理中心注册应用程序
创建客户端机密
按照注册应用程序:添加凭据中的步骤,在 Microsoft Entra 管理中心生成客户端密钥。
存储Microsoft客户端 ID 和机密
使用机密管理器存储在上一步中创建的敏感设置,例如Microsoft应用程序(客户端)ID 和客户端密码。 对于此示例,请使用以下步骤:
按照启用机密存储中的说明初始化项目以启用机密存储。
使用密钥
Authentication:Microsoft:ClientId和Authentication:Microsoft:ClientSecret将敏感设置存储在本地机密存储中:dotnet user-secrets set "Authentication:Microsoft:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Microsoft:ClientSecret" "<client-secret>"
: 分隔符不适用于所有平台上的环境变量分层键。 例如,: 不支持 分隔符。 __(双下划线):
- 所有平台都支持。
- 自动替换为冒号,即
:。
配置Microsoft帐户身份验证
将微软账户服务添加到Startup.ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
});
}
AddAuthentication(IServiceCollection, String) 重载设置 DefaultScheme 属性。 AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) 重载允许配置身份验证选项,这些选项可用于为不同的目的设置默认身份验证方案。 对 AddAuthentication 的后续调用将替代以前配置的 AuthenticationOptions 属性。
注册身份验证处理程序的 AuthenticationBuilder 扩展方法只能在每个身份验证方案中调用一次。 存在允许配置方案属性、方案名称和显示名称的重载。
有关Microsoft帐户身份验证支持的配置选项的详细信息,请参阅 MicrosoftAccountOptions API 参考。 这可用于请求有关用户的不同信息。
使用 Microsoft 帐户登录
运行应用并选择 “登录”。 将显示一个使用Microsoft登录的选项。 选择 Microsoft 以导航到Microsoft进行身份验证。 使用 Microsoft 帐户登录后,系统会提示应用访问你的信息:
点击 “是 ”,你将被重定向回可以设置电子邮件的网站。
现在,你已使用Microsoft凭据登录。
使用代理或负载均衡器转发请求信息
如果应用程序部署在代理服务器或负载均衡器后面,某些原始请求信息可能会通过请求头转发到应用程序。 此信息通常包括安全请求方案 (https)、主机和客户端 IP 地址。 应用不会自动读取这些请求标头以发现和使用原始请求信息。
该方案用于生成会影响与外部提供商的身份验证流程的链接。 丢失安全方案 (https) 会导致应用生成不正确且不安全的重定向 URL。
使用转发标头中间件以使应用可以使用原始请求信息来进行请求处理。
有关详细信息,请参阅配置 ASP.NET Core 以使用代理服务器和负载均衡器。
故障排除
如果 Microsoft 帐户提供程序将你重定向到登录错误页面,请注意 URI 中直接跟在
#(井号标签)之后的错误标题和说明查询字符串参数。尽管错误消息似乎表明Microsoft身份验证出现问题,但最常见的原因是应用程序 URI 与为 Web 平台指定的任何重定向 URI 不匹配。
如果Identity未通过在
ConfigureServices中调用services.AddIdentity进行配置,那么尝试进行身份验证时将会导致ArgumentException:必须提供“SignInScheme”选项。 此示例中使用的项目模板可确保完成此作。如果站点数据库尚未通过应用初始迁移来创建,您将收到 处理请求时数据库操作失败 错误。 点击 应用迁移 以创建数据库并刷新页面以继续处理错误。
后续步骤
- 本文介绍了如何使用 Microsoft进行身份验证。 可以按照类似的方法向上一页中列出的其他提供程序进行身份验证。
- 将网站发布到 Azure Web 应用后,请在 Microsoft Entra 管理中心创建新的客户端密码。
- 将
Authentication:Microsoft:ClientId和Authentication:Microsoft:ClientSecret设置为 Microsoft Entra 管理中心中的应用程序设置。 配置系统设置为从环境变量读取密钥。