Получение refre sh токена от Microsoft Identity Platform - PullRequest
0 голосов
/ 31 января 2020

У меня есть Azure веб-приложение, в котором я хочу, чтобы пользователи входили в Microsoft (Azure AD). Мне нужно получить жетон refre sh. Я уже рассмотрел примеры использования библиотек, в которых sh токен молча воспроизводится в фоновом режиме, но для моего дизайна мне нужно получить сам маркер refre sh.

Можно ли этого достичь с библиотекой аутентификации высокого уровня (OpenID Connect?), и если да, то как? Для ручного подхода он описан здесь: https://docs.microsoft.com/en-us/graph/auth-v2-user Есть ли пример кода или учебник для этого в ASP. NET или. NET Core?

1 Ответ

1 голос
/ 03 февраля 2020

Во-первых, я бы предложил использовать 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.

...