ASP.NET Core 中的 Google 外部登录设置

瓦莱里伊·诺维茨基里克·安德森莎拉夫·阿巴塞里

本教程演示如何使用在 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 和机密值。 对于此示例,请执行以下步骤:

  1. 根据 ASP.NET Core 中开发中的应用机密的安全存储中的说明初始化机密存储项目。

  2. 使用密钥 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 进行身份验证。 有关与其他外部提供程序进行身份验证的信息,请参阅在 ASP.NET Core 中使用外部登录提供程序Identity
  • 将应用部署到 Azure 后,请在 ClientSecret Google API 控制台中重置。
  • Authentication:Google:ClientId Azure 门户中设置和 Authentication:Google:ClientSecret 设置为应用设置。 配置系统设置为从环境变量读取密钥。