如何在 ASP.NET Core 中使用 .AddOpenIdConnect() 从 Google 请求 offline_access?

问题描述

我知道 Microsoft 提供了一个特定于 Google 的 OIDC 包 (rm ~/.local/share/applications/google-chrome.dektop ),它采用 Microsoft.AspNetCore.Authentication.Google 中的一个选项来指定可以设置为 .AddGoogle()Accesstype。>

但这可以使用标准的 ASP.NET Core OIDC 包 offlineMicrosoft.AspNetCore.Authentication.OpenIdConnect 来完成吗?

使用 Microsoft 帐户,我们可以简单地请求 .AddOpenIdConnect() 范围并且它完美运行。但它不适用于 Google 并导致 offline_access 错误

解决方法

想通了。 Google 将 access_type 参数用于离线访问请求而不是范围。所以我们可以处理OnRedirectToIdentityProvider中的OpenIdConnectOptions事件来添加这个参数:

 options.Events.OnRedirectToIdentityProvider = context =>
 {
   context.ProtocolMessage.SetParameter("access_type","offline");
   return Task.CompletedTask;
 };