如何在 ASP.NET Core 中使用 .AddOpenIdConnect() 从 Google 请求 offline_access?
How to request offline_access from Google using .AddOpenIdConnect() in ASP.NET Core?
我知道 Microsoft 提供了一个 Google-特定的 OIDC 包 (Microsoft.AspNetCore.Authentication.Google
),它在 .AddGoogle()
中使用一个选项来指定 AccessType
,可以设置为 offline
.
但这可以使用标准 ASP.NET 核心 OIDC 包 Microsoft.AspNetCore.Authentication.OpenIdConnect
和 .AddOpenIdConnect()
来完成吗?
使用 Microsoft 帐户,我们可以简单地请求 offline_access
范围,它可以完美运行。但它不适用于 Google 并导致 invalid_scope
错误。
想通了。 Google 使用 access_type
参数进行离线访问请求而不是范围。所以我们可以在OpenIdConnectOptions
中处理OnRedirectToIdentityProvider
事件添加这个参数:
options.Events.OnRedirectToIdentityProvider = context =>
{
context.ProtocolMessage.SetParameter("access_type", "offline");
return Task.CompletedTask;
};
我知道 Microsoft 提供了一个 Google-特定的 OIDC 包 (Microsoft.AspNetCore.Authentication.Google
),它在 .AddGoogle()
中使用一个选项来指定 AccessType
,可以设置为 offline
.
但这可以使用标准 ASP.NET 核心 OIDC 包 Microsoft.AspNetCore.Authentication.OpenIdConnect
和 .AddOpenIdConnect()
来完成吗?
使用 Microsoft 帐户,我们可以简单地请求 offline_access
范围,它可以完美运行。但它不适用于 Google 并导致 invalid_scope
错误。
想通了。 Google 使用 access_type
参数进行离线访问请求而不是范围。所以我们可以在OpenIdConnectOptions
中处理OnRedirectToIdentityProvider
事件添加这个参数:
options.Events.OnRedirectToIdentityProvider = context =>
{
context.ProtocolMessage.SetParameter("access_type", "offline");
return Task.CompletedTask;
};