如何自动刷新访问令牌

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

我有一个具有以下范围的API(api_access和offline_access):

api scopes

还有一个使用代码流并使用该 api 的前端 blazor 应用程序。以下是我配置身份验证的方式:

builder.Services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
            {
                options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.Authority = "xxxxx";
                options.ClientId = "xxxxx";

                options.ResponseType = "code";

                options.SaveTokens = true;

             options.Scope.Add("api://xxxxx/api_access");

               options.ClientSecret = "xxxxx";

这是我请求访问代码来调用 api 的方式:

var access_token = await httpContext.GetTokenAsync("access_token");

这可行,但访问令牌将在一小时后过期。当我在过期后再次调用

httpContext.GetTokenAsync("access_token")
时,我没有得到新的令牌。如何获取新的有效令牌?

azure azure-active-directory blazor openid-connect
1个回答
0
投票

根据您的设计,您可以使用

refresh_token
来获取新的
access_token
。您需要使用您的
/token
调用
refresh_token
端点。

从文档复制的示例。

POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=sampleCredentia1s

这是微软对此的说法

但是,可能有一些库可以处理客户端的琐事。

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