在 ASP.NET Core Google 外部登录安装程序Google external login setup in ASP.NET Core

本文内容

作者:Valeriy NovytskyyRick Anderson

本教程演示如何让用户能够使用在前一页上创建的 ASP.NET Core 3.0 项目使用其 Google 帐户登录。

创建 Google API 控制台项目和客户端 IDCreate a Google API Console project and client ID

存储 Google 客户端 ID 和机密Store the Google client ID and secret

机密管理器存储敏感设置,例如 Google 客户端 ID 和机密值。对于本示例,请使用以下步骤:

  • 按照启用密钥存储中的说明初始化密钥存储的项目。

  • 将敏感设置存储在本地密钥存储中,并将机密密钥 Authentication:Google:ClientIdAuthentication:Google:ClientSecret

  1. dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
  2. dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"

所有平台上的环境变量分层键都不支持 : 分隔符。__(双下划线):

  • 受所有平台支持。例如,Bash 不支持 : 分隔符,但支持 __
  • 自动替换为 :

你可以在Api 控制台中管理 api 凭据和使用情况。

配置 Google 身份验证Configure Google authentication

将 Google 服务添加到 Startup.ConfigureServices

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddDbContext<ApplicationDbContext>(options =>
  4. options.UseSqlServer(
  5. Configuration.GetConnectionString("DefaultConnection")));
  6. services.AddDefaultIdentity<IdentityUser>(options =>
  7. options.SignIn.RequireConfirmedAccount = true)
  8. .AddEntityFrameworkStores<ApplicationDbContext>();
  9. services.AddRazorPages();
  10. services.AddAuthentication()
  11. .AddGoogle(options =>
  12. {
  13. IConfigurationSection googleAuthNSection =
  14. Configuration.GetSection("Authentication:Google");
  15. options.ClientId = googleAuthNSection["ClientId"];
  16. options.ClientSecret = googleAuthNSection["ClientSecret"];
  17. });
  18. }

AddIdentity的调用将配置默认方案设置。AddAuthentication (字符串)重载设置DefaultScheme属性。AddAuthentication (Action<AuthenticationOptions>)重载允许配置身份验证选项,这些选项可用于为不同目的设置默认的身份验证方案。对的后续调用 AddAuthentication 重写以前配置的AuthenticationOptions属性。

对于注册身份验证处理程序的AuthenticationBuilder扩展方法,每个身份验证方案只能调用一次。存在允许配置方案属性、方案名称和显示名称的重载。

登录 GoogleSign in with Google

  • 运行应用程序,并单击 "登录" 。此时将显示使用 Google 登录的选项。
  • 单击 " google " 按钮,该按钮将重定向到 google 进行身份验证。
  • 输入 Google 凭据后,会重定向回网站。

使用代理或负载均衡器转发请求信息Forward request information with a proxy or load balancer

如果应用部署在代理服务器或负载均衡器后面,则可能会将某些原始请求信息转发到请求标头中的应用。此信息通常包括安全请求方案 (https)、主机和客户端 IP 地址。应用不会自动读取这些请求标头以发现和使用原始请求信息。

方案用于通过外部提供程序影响身份验证流的链接生成。丢失安全方案 (https) 会导致应用生成不正确且不安全的重定向 URL。

使用转发标头中间件以使应用可以使用原始请求信息来进行请求处理。

有关详细信息,请参阅 配置 ASP.NET Core 以使用代理服务器和负载均衡器

多个身份验证提供程序Multiple authentication providers

如果应用需要多个提供程序,请在 AddAuthentication 后面链接提供程序扩展方法:

  1. services.AddAuthentication()
  2. .AddMicrosoftAccount(microsoftOptions => { ... })
  3. .AddGoogle(googleOptions => { ... })
  4. .AddTwitter(twitterOptions => { ... })
  5. .AddFacebook(facebookOptions => { ... });

有关 Google authentication 支持的配置选项的详细信息,请参阅 GoogleOptions API 参考。这可以用于请求有关用户的不同信息。

更改默认回调 URIChange the default callback URI

URI 段 /signin-google 设置为 Google 身份验证提供程序的默认回调。通过GoogleOptions类的继承的RemoteAuthenticationOptions. CallbackPath属性配置 Google 身份验证中间件时,可以更改默认的回叫 URI。

故障排除Troubleshooting

  • 如果登录不起作用,并且没有出现任何错误,请切换到开发模式,以便更轻松地进行调试。
  • 如果未通过在 ConfigureServices中调用 services.AddIdentity 来配置标识,尝试对 ArgumentException 中的结果进行身份验证 :必须提供 "SignInScheme" 选项。在本教程中使用的项目模板可确保,此操作。
  • 如果尚未通过应用初始迁移来创建站点数据库,则在处理请求错误时,将会出现数据库操作失败的情况。选择 "应用迁移" 以创建数据库,并刷新页面以继续出现错误。

后续步骤Next steps

  • 本文介绍了您如何可以使用 Google 进行验证。您可以遵循类似的方法向前一页上列出的其他提供程序进行身份验证。
  • 将应用发布到 Azure 后,请在 Google API 控制台中重置 ClientSecret
  • Authentication:Google:ClientIdAuthentication:Google:ClientSecret 设置为 Azure 门户中的应用程序设置。配置系统设置以从环境变量读取密钥。