Во-первых, я бы предложил использовать MSAL , который поддерживает кэш токенов и обновляет токены, когда они близки к истечению срока действия. Вам не нужно самостоятельно обрабатывать срок действия токена.
Если вы хотите удерживать токен refre sh, вы можете установить для свойства SaveTokens
значение true при регистрации промежуточного программного обеспечения OID C, чтобы эти жетоны будут сохранены в Cook ie. Я предполагаю, что вы используете библиотеку Microsoft.AspNetCore.Authentication.AzureAD.UI
:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/";
options.SaveTokens = true;
});
Затем вы можете получить доступ к токенам в контроллере, например:
var refreshToken = await HttpContext.GetTokenAsync("refresh_token");
var idToken = await HttpContext.GetTokenAsync("id_token");
Обновление:
Это потому, что вы неправильно получаете токен refre sh. Для тестирования вы можете использовать поток кода и добавить offline_access
область действия OID C:
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.Authority = options.Authority + "/v2.0/";
options.SaveTokens = true;
options.ResponseType = "code";
options.ClientSecret = "xxxxxx";
options.Scope.Add("offline_access");
options.TokenValidationParameters.ValidateIssuer = false;
});
Заменить ClientSecret
на тот, который вы сконфигурировали на портале Azure.