Почему AcquireTokenByAuthorizationCode не возвращает RefreshToken - PullRequest
0 голосов
/ 16 октября 2019

В этой документации он предоставляет полный поток для веб-приложения, которое вызывает веб-API:

  1. Веб-приложение выполняет политику, а пользователь выполняетвзаимодействие с пользователем.
  2. Azure AD B2C возвращает в браузер id_token (OpenID Connect) и код авторизации.
  3. Браузер отправляет id_token и код авторизации в URI перенаправления.
  4. Веб-сервер проверяет id_token и устанавливает файл cookie сеанса.
  5. Веб-сервер запрашивает Azure AD B2C для access_token, предоставляя ему код авторизации, идентификатор клиента приложения и учетные данные клиента.
  6. access_token и refresh_token возвращаются веб-серверу.
  7. Веб-API вызывается с access_token в заголовке авторизации.
  8. Веб-API проверяет токен.
  9. Защищенные данные возвращаются в веб-приложение.

Просмотр 6. и использование кода в репозитории Azure-Samples active-directory-b2c-dotnet-webapp-and-webapi , я не могу получить строку

AuthenticationResult result = await confidentialClient.AcquireTokenByAuthorizationCode(Globals.Scopes, notification.Code).ExecuteAsync();

для возврата refresh_token. Он возвращает IdToken и AccessToken, но не RefreshToken. screenshot of breakpoint result

Используя мой браузер и Почтальон и следуя инструкциям в этом документе с тем же клиентом B2C и приложением, которое я делаю получитьжетон обновления, как и ожидалось.

Этот вопрос аналогичен моему, а сообщение в блоге , упомянутое в одном из ответов, позволяет обойти симптом отсутствиятокен обновления, но мой вопрос остается:

Как я могу получить AcquireTokenByAuthorizationCode для возврата маркера refresh?

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Область offline_access необязательна для веб-приложений. Это означает, что вашему приложению необходим токен обновления для долговременного доступа к ресурсам.

Перейдите по адресу web.config и добавьте ниже:

 <add key ="api:OfflineAccessScope" value="offline_access "/>

И в Global. cs:

public static string OfflineAccessScope = ApiIdentifier + ConfigurationManager.AppSettings["api:OfflineAccessScope"];
public static string[] Scopes = new string[] { ReadTasksScope, WriteTasksScope, OfflineAccessScope};

Тогда Globals.Scopes in AcquireTokenByAuthorizationCode вернет токен обновления.

0 голосов
/ 16 октября 2019

Чтобы получить токен обновления, ваше приложение должно добавить offline_access в качестве области действия.

Вы упомянули как этот msdn, способный вернуть вам токен обновления. Это потому, что запрос уже содержит область offline_access

&scope=openid%20offline_access

Чтобы получить токен обновления из active-directory-b2c-dotnet-webapp-and-webapi . Вам необходимо обновить Global.cs Области, поданные для включения offline_access

public static string[] Scopes = new string[] { ReadTasksScope, WriteTasksScope, "offline_access" };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...