如何在 ASP.NET Core 中使用 .AddOpenIdConnect() 向 Google 请求离线访问?

tha*_*ssd 5 asp.net google-openid asp.net-identity openid-connect asp.net-core

我知道微软提供了一个谷歌特定的OIDC包( Microsoft.AspNetCore.Authentication.Google),它有一个选项.AddGoogle()来指定AccessType可以设置为offline.

但这可以使用标准 ASP.NET Core OIDC 包Microsoft.AspNetCore.Authentication.OpenIdConnect来完成吗.AddOpenIdConnect()

使用 Microsoft 帐户,我们可以简单地请求offline_access范围,并且效果完美。但它不适用于 Google,并会导致错误invalid_scope

tha*_*ssd 8

想通了这一点。Google 使用access_type参数进行离线访问请求,而不是范围。所以我们可以在处理OnRedirectToIdentityProvider事件的时候OpenIdConnectOptions添加这个参数:

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