[英]OpenIdDict external login, how to refresh token
我需要刷新外部登錄access_token,我該怎么做?
我有谷歌外部授權。 我需要將 AccessToken 存儲在 HttpContext 中以向 google 發出請求,但過期后我需要刷新此令牌。
這是一個如何啟用刷新令牌流的示例:
https://github.com/openiddict/openiddict-samples/tree/dev/samples/Imynusoph
本教程還使用刷新令牌:
builder.Services.AddOpenIddict().AddCore(options =>
{
options.UseEntityFrameworkCore().UseDbContext<FaDbContext>();
})
.AddServer(options =>
{
options
.AllowClientCredentialsFlow()
.AllowAuthorizationCodeFlow()
.RequireProofKeyForCodeExchange()
.AllowPasswordFlow()
.AllowRefreshTokenFlow();
});
using FaID.Context;
using Microsoft.EntityFrameworkCore;
using OpenIddict.Abstractions;
namespace FaID.Services.AuthorizationServer
{
public class TestData : IHostedService
{
private readonly IServiceProvider _serviceProvider;
public TestData(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
using var scope = _serviceProvider.CreateScope();
var context = scope.ServiceProvider.GetRequiredService<FaDbContext>();
await context.Database.EnsureCreatedAsync(cancellationToken);
var manager = scope.ServiceProvider.GetRequiredService<IOpenIddictApplicationManager>();
if (await manager.FindByClientIdAsync("postman", cancellationToken) is null)
{
await manager.CreateAsync(new OpenIddictApplicationDescriptor
{
ClientId = "postman",
ClientSecret = "postman-secret",
DisplayName = "Postman",
RedirectUris = { new Uri("https://oauth.pstmn.io/v1/callback") },
Permissions =
{
OpenIddictConstants.Permissions.Endpoints.Authorization,
OpenIddictConstants.Permissions.Endpoints.Token,
OpenIddictConstants.Permissions.GrantTypes.RefreshToken,
OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode,
OpenIddictConstants.Permissions.GrantTypes.ClientCredentials,
OpenIddictConstants.Permissions.GrantTypes.Password,
OpenIddictConstants.Permissions.Prefixes.Scope + "api",
OpenIddictConstants.Permissions.ResponseTypes.Code
}
,
Type = OpenIddictConstants.ClientTypes.Public
}, cancellationToken);
}
}
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
}
編輯:添加代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.