Azure WebApp-WebAPI - ›Тип предоставления authorization_code не возвращает RefreshToken

Я следил за этим сообщением относительно этого example и внесли предложенные дополнения в портал и код:

Портал: веб-API - открыть API - добавить область для «offline_access» (также пробовал с форматом «demo.offline_access»); Веб-приложение добавило разрешение "offline_access"

Код: добавлен offline_access в Start_Auth.cs, Global.cs и оба файла Web.config.

Я делаю свой запрос на accessToken и refreshToken согласно документация с:

var ClientID = "XXXX";
            var BaseURL = "https://XXX.b2clogin.com/XXX.onmicrosoft.com/oauth2/v2.0/token?p=B2C_1_signinsignoutpolicy";
            var ClientSecret = "XXX";
            string redirectUri = "https://XXX.azurewebsites.net/api/GetAccessToken";
            var content = new StringContent(
              "&grant_type=authorization_code"+
              "&client_id="+ClientID+
              "&scope=" + "https://XXX.onmicrosoft.com/api/demo.read https://XXX.onmicrosoft.com/api/demo.write https://XXX.onmicrosoft.com/api/offline_access" +
              "&code="+authCode+
              "&redirect_uri=" + redirectUri+
              "&client_secret=" + ClientSecret,
              Encoding.UTF8,
              "application/x-www-form-urlencoded");

            var response = await httpClient.PostAsync(BaseURL, content);
            var output = await response.Content.ReadAsStringAsync();

output возвращает access_token, но не обновляет токен. При просмотре утверждений access_token область видимости (scp) правильно показывает offline_access demo.read demo.write

Что мне не хватает для получения токена обновления?

[EDIT} Вот результат почтальона:  введите описание изображения здесь JWT для полученного токена доступа:  введите описание изображения здесь Разрешения API веб-приложений:  введите описание изображения здесь < / a> WebAPI - Откройте API:  введите описание изображения здесь

Изменения кода: Области действия как WebApp, так и WebAPI Web.config:

<add key="api:ReadScope" value="demo.read" />
<add key="api:WriteScope" value="demo.write" />
<add key="api:OfflineScope" value="offline_access" />

TaskWebApp Globals.cs scope addition:

// API Scopes
    public static string ApiIdentifier = ConfigurationManager.AppSettings["api:ApiIdentifier"];
    public static string ReadTasksScope = ApiIdentifier + ConfigurationManager.AppSettings["api:ReadScope"];
    public static string WriteTasksScope = ApiIdentifier + ConfigurationManager.AppSettings["api:WriteScope"];
    public static string OfflineTasksScope = ApiIdentifier + ConfigurationManager.AppSettings["api:OfflineScope"];
    public static string[] Scopes = new string[] { ReadTasksScope, WriteTasksScope, OfflineTasksScope };

Добавление области TaskWebApp Startup.Auth.cs в ConfigureAuth:

// Specify the scope by appending all of the scopes requested into one string (separated by a blank space)
                Scope = $"openid profile offline_access {Globals.ReadTasksScope} {Globals.WriteTasksScope} {Globals.OfflineTasksScope}"

Спасибо за помощь


person Sergio Solorzano    schedule 23.03.2020    source источник
comment
Я пробовал с почтальоном и отлично работает для меня. Не могли бы вы убедиться, что столкнулись с такой же проблемой и с почтальоном.   -  person Md Farid Uddin Kiron    schedule 23.03.2020
comment
Привет, @MdFaridUddinKiron. Я редактировал сообщение с результатами почтальона и декодировал токен, показывающий, что offline_access правильно выбран, все еще нет обновления, идеи действительно приветствуются, пожалуйста :)   -  person Sergio Solorzano    schedule 23.03.2020


Ответы (1)


https://XXX.onmicrosoft.com/api/offline_access - это разрешение, которое вы настроили в своем приложении веб-API. Это не для получения токена обновления.

Здесь вам просто нужно использовать offline_access.

"&scope=" + "https://XXX.onmicrosoft.com/api/demo.read https://XXX.onmicrosoft.com/api/demo.write offline_access"
person Allen Wu    schedule 24.03.2020
comment
Спасибо, @Allen Wu, у меня это уже было до настройки offline_access, и он не работал (// Укажите область, добавив все запрашиваемые области в одну строку (разделенную пробелом) Scope = $ openid profile offline_access {Globals. ReadTasksScope} {Globals.WriteTasksScope}), куда я должен добавить его в примере (см. Настройку опубликованного кода). Стоит ли мне также вносить какие-либо изменения в портал? - person Sergio Solorzano; 24.03.2020
comment
@SergioSolorzano Удалите разрешение offline_access для вашего WebAPI на портале Azure. Вы также можете попробовать использовать "&scope=" + "offline_access" только для того, чтобы увидеть, сможете ли вы получить токен обновления. Если вы можете его получить, попробуйте использовать "&scope=" + "https://XXX.onmicrosoft.com/api/demo.read https://XXX.onmicrosoft.com/api/demo.write offline_access" после удаления разрешения offline_access. - person Allen Wu; 24.03.2020
comment
Привет @Allen Wu, это сработало, спасатель жизни !! :) Огромное спасибо! - person Sergio Solorzano; 24.03.2020