使用 Microsoft.Identity.Web 对 Blazor 8 Web 应用程序进行 Azure AD OIDC 身份验证不会生成刷新令牌

问题描述 投票:0回答:1

我已使用 Microsoft.Identity.Web(来自 Microsoft.Identity.Web 的 AddMicrosoftIdentityWebApp)设置了具有 Azure AD 身份验证的 Blazor 8 Web 应用程序。

一切正常,因为我获得了 Web 应用程序身份验证/授权的访问令牌,并且我还将其用于 Web API 不记名令牌。问题在于缺少刷新令牌。我的范围有以下内容:offline_access、profile 和 openid。但是,我没有获取刷新令牌。由于缺少刷新令牌,我无法在访问令牌过期后刷新它。

我使用下面的代码获取访问令牌

 options.Events.OnTokenValidated = async context =>
 {
    accessToken = context.TokenEndpointResponse!.AccessToken;
}

我期待刷新令牌的代码如下

context.GetTokenAsync(“refresh_token”);但我得到了空。

您知道无法获得刷新令牌的潜在原因是什么吗?

azure-active-directory blazor refresh-token .net-8.0
1个回答
0
投票

您不需要处理刷新令牌,您可以配置 Microsoft.Identity.Web 来启用令牌获取:https://learn.microsoft.com/en-us/entra/identity-platform/scenario-web- app-call-api-app-configuration?tabs=aspnetcore#startupcs.

文档中的示例:

  services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
          .AddMicrosoftIdentityWebApp(Configuration, "AzureAd")
            .EnableTokenAcquisitionToCallDownstreamApi(new string[]{"user.read" })
            .AddInMemoryTokenCaches();

然后您可以直接使用 Graph 客户端(如果调用 MS Graph API),或者注入

IDownstreamApi
(并通过它进行调用),或者注入
ITokenAcquisition
(手动获取令牌)。 如果需要,它将处理令牌刷新。

注意示例中它使用内存中令牌缓存, 如果您的服务器进程重新启动,该值将被清除,并且如果在服务器场中运行,则该值也会因实例而异。 我建议检查如何配置持久令牌缓存:https://github.com/AzureAD/microsoft-identity-web/wiki/token-cache-serialization。 例如,您可以使用

IDistributedCache

© www.soinside.com 2019 - 2024. All rights reserved.