本教程演示如何使用在 ASP.NET Core 中使用外部登录提供程序Identity创建的示例 ASP.NET Core 项目,让用户使用 Google 帐户登录。 按照 Google 的官方指南使用 Google for Web 登录:设置 以创建 Google API 客户端 ID。
在 Google 中创建应用
- 导航到 Google Cloud 平台的 Google API 和服务 页面。
- 如果不存在项目,则通过选择“ 创建项目 ”按钮创建新项目。 若要选择与加载的现有项目不同的项目,请选择 UI 左上角的已加载项目的按钮,后跟项目。 若要添加新项目,请在 UI 左上角选择加载的项目按钮,然后选择 “新建项目 ”按钮。
- 创建新项目时:
- 输入项目名称。
- (可选)为项目选择 组织 。
- 选择“创建”按钮。
创建项目后,项目的 “仪表板 ”页将加载,可以在其中配置项目。
打开 “凭据 ”选项卡以创建 OAuth 客户端。
创建凭据的先决条件是配置 OAuth 同意屏幕。 如果未配置许可,系统会提示配置许可屏幕。
- 选择 “配置许可”屏幕 ,或在边栏中选择 “OAuth 同意”屏幕 。
- 在 OAuth 许可屏幕中,选择 “入门”。
- 设置应用名称和用户支持电子邮件。
- 将访问群体类型设置为 “外部”。
- 通过输入联系人电子邮件地址添加联系人 信息 。
- 同意条款。
- 选择 创建。
通过打开 “客户端 ”边栏菜单项为应用创建客户端凭据:
- 选择 “创建客户端 ”按钮。
- 选择 Web 应用程序 作为 应用程序类型。
- 输入客户端 的名称 。
- 添加 授权重定向 URI。 对于本地测试,请使用默认地址
https://localhost:{PORT}/signin-google
,其中{PORT}
占位符是应用的端口。 - 选择“ 创建 ”按钮以创建客户端。
- 保存 客户端 ID 和 客户端密码,稍后在 ASP.NET 应用配置中使用。
注释
URI 段 /signin-google
被设置为 Google 身份验证提供程序的默认回调函数。 可以通过类的GoogleOptions继承RemoteAuthenticationOptions.CallbackPath属性配置 Google 身份验证中间件时更改默认回调 URI。
部署应用时,有以下任一项:
- 在 Google 控制台中将应用的重定向 URI 更新为应用的已部署重定向 URI。
- 在 Google 控制台中使用生产应用的生产重定向 URI 为此应用创建新的 Google API 注册。
存储 Google 客户端 ID 和机密
使用 机密管理器存储敏感设置,例如 Google 客户端 ID 和机密值。 对于此示例,请执行以下步骤:
根据 ASP.NET Core 中开发中的应用机密的安全存储中的说明初始化机密存储项目。
使用密钥
Authentication:Google:ClientId
(值:{CLIENT ID}
占位符)和Authentication:Google:ClientSecret
(值:占位符){CLIENT SECRET}
将敏感设置存储在本地机密存储中:dotnet user-secrets set "Authentication:Google:ClientId" "{CLIENT ID}" dotnet user-secrets set "Authentication:Google:ClientSecret" "{CLIENT SECRET}"
:
分隔符不适用于所有平台上的环境变量分层键。 例如,:
不支持 分隔符。
__
(双下划线):
- 所有平台都支持。
- 自动替换为冒号,即
:
。
在 API 控制台中管理 API 凭据和使用情况。
配置 Google 身份验证
将身份验证服务添加到 Program
文件:
services.AddAuthentication().AddGoogle(googleOptions =>
{
googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
});
将身份验证服务添加到 Startup.ConfigureServices
:
services.AddAuthentication().AddGoogle(googleOptions =>
{
googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
});
AddAuthentication(IServiceCollection, String) 重载设置 DefaultScheme 属性。
AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) 重载允许配置身份验证选项,这些选项可用于为不同的目的设置默认身份验证方案。 对 AddAuthentication
的后续调用将替代以前配置的 AuthenticationOptions 属性。
注册身份验证处理程序的 AuthenticationBuilder 扩展方法只能在每个身份验证方案中调用一次。 存在允许配置方案属性、方案名称和显示名称的重载。
使用 Google 登录
- 运行应用并选择 “登录”。
- 在 “使用其他服务登录”。下,选择 Google。
- 浏览器重定向到 Google 进行身份验证。
- 选择要登录或输入 Google 凭据的 Google 帐户。
- 如果这是首次登录,系统会提示应用访问 Google 帐户信息。
- 浏览器将重定向回应用,可在其中设置电子邮件。
用户现在使用 Google 凭据登录。
故障 排除
- 如果登录在未收到任何错误的情况下不起作用,请切换到开发模式,使应用和 Google 注册更易于调试。
- 如果站点的数据库尚未通过应用初始迁移来创建,则会发生以下错误: 处理请求时数据库作失败。 选择 “应用迁移 ”以创建数据库并刷新页面以继续超过错误。
- 有关 OAuth 2.0 提供程序(如 Google)成功对请求进行身份验证后出现 HTTP 500 错误的信息,以及有关如何使用 Google for React 和其他 SPA 应用实现外部身份验证的信息,请参阅 中间件在 Asp.Net Core Web Api 外部登录身份验证(
dotnet/AspNetCore.Docs
#14169)中成功进行身份验证后不会处理“signin-google”路由。
后续步骤
- 本文演示了使用 Google 进行身份验证。 有关与其他外部提供程序进行身份验证的信息,请参阅在 ASP.NET Core 中使用外部登录提供程序Identity。
- 将应用部署到 Azure 后,请在
ClientSecret
Google API 控制台中重置。 - 在
Authentication:Google:ClientId
Azure 门户中设置和Authentication:Google:ClientSecret
设置为应用设置。 配置系统设置为从环境变量读取密钥。