Автоматическая аутентификация B2B

Наше приложение использует Adal SDK для платформ Android и IOS. Мы хотим добавить поддержку в B2B и обмен данными между арендаторами. Предположим, что пользователь из домашних клиентов уже был приглашен в другой клиент.

Я хотел знать, что такое API для получения токена приглашающему арендатору, предполагая, что пользователь уже вошел в систему до домашнего арендатора? как можно незаметно получить токен приглашающему арендатору?

Я попытался и мне удалось получить токен с помощью интерактивного входа (путем предоставления конкретного идентификатора приглашающего арендатора вместо использования общего), но я не уверен, как выполнить автоматический вход приглашающему арендатору (когда у пользователя есть токен для арендатор дома)

Что мне удалось сделать, так это незаметно получить токен для домашнего арендатора, а затем использовать токен обновления, который я получил, чтобы получить токен для приглашающего арендатора, вызвав функцию AcquiTokenByRefreshToken (и используя два AuthenticationContext — один с общими полномочиями и во-вторых, с конкретным идентификатором арендатора), но затем я заметил, что в Android SDK AcquireTokenByRefreshToken помечен как устаревший, а в IOS SDK кажется, что эта функция является частной, поэтому мы не можем ее использовать.

Итак, что я хотел знать, так это то, что такое правильный API для получения токена приглашающему арендатору с использованием токена домашнего арендатора и идентификатора приглашающего арендатора?


person O. Eduar    schedule 12.07.2017    source источник


Ответы (3)


Гостевой доступ в ADAL для Android поддерживается версиями 1.14.x+ (выпущенными в феврале 2018 г.) — ссылку на последние версии можно найти здесь. Они доступны для загрузки на Maven Central. .

Для гостевых сценариев AuthenticationContext можно реконструировать с помощью URL-адреса центра сертификации, содержащего идентификатор арендатора — acquireTokenSilent вызовы затем можно выполнять с помощью UserInfo.userId получен из AuthenticationResult предыдущего вызова acquireToken или acquireTokenSilent.

Обратите внимание, что по состоянию на октябрь 2018 г. (на момент написания этого ответа) существуют некоторые ограничения, о которых следует помнить в отношении поддержки токенов обновления x-tenant:

Если вы пытаетесь выполнить поток, в котором...

  1. Вы приобретаете токен (используя пользовательский интерфейс и запрашивая у пользователя учетные данные) для домашнего арендатора и...
  2. Затем вы автоматически приобретаете токен для гостевого клиента.

Тогда это будет работать только в том случае, если устройство присоединено (зарегистрировано) к домашнему арендатору. В любом другом случае поддерживается следующий поток...

  1. Вы приобретаете токен (интерактивно, используя пользовательский интерфейс для ввода кредитов) для домашнего арендатора и...
  2. Затем вы автоматически приобретаете токен для домашнего арендатора.
  3. Вы приобретаете токен (интерактивно, используя пользовательский интерфейс для ввода учетных данных) для гостевого арендатора и...
  4. Затем вы автоматически приобретаете токен для гостевого клиента.
person Brian Melton-Grace - MSFT    schedule 16.10.2018

Похоже, что для устройства, которое не зарегистрировано (и не зарегистрировано?), вы должны выполнить интерактивный вход во внешний клиент, прежде чем получать токен доступа.

Однако, как вы можете видеть в первом ответе (вторая часть), существует API для отдыха, который можно использовать для получения токена доступа к внешнему арендатору с использованием только токена обновления домашнего арендатора (и без принуждения пользователя). для интерактивного входа)

сегодня это не поддерживается в SDK

person O. Eduar    schedule 10.01.2019
comment
Пожалуйста, не спрашивайте и не давайте разъяснений вместе с ответом. Когда вы наберете достаточную репутацию, вы сможете комментировать везде. А пока старайтесь отвечать на вопросы, не требующие дополнительных разъяснений от задающего. - person Pika the Master of the Whales; 10.01.2019
comment
Правильно, это не поддерживается (на момент написания этой статьи) в ADAL SDK. - person Brian Melton-Grace - MSFT; 23.01.2019

будет удален из следующего основного выпуска. Мы не рекомендуем разработчикам полагаться на токен обновления*, ADAL будет обрабатывать поиск в кэше и при необходимости обновлять RT.

Судя по описанию, следующая версия ADAL для Android будет автоматически обрабатывать токен обновления. Вы можете обратиться к библиотека azure-activedirectory-library-for-dotnet. Он также автоматически обрабатывает новый токен, используя
AcquireTokenAsync(string resource, string clientId, Uri redirectUri, IPlatformParameters parameters).

Итак, что я хотел знать, так это то, что такое правильный API для получения токена приглашающему арендатору с использованием токена домашнего арендатора и идентификатора приглашающего арендатора?

Насколько я понимаю, SDK не поддерживает это обновление маркера доступа для другого клиента. В качестве обходного пути вы можете опубликовать запрос напрямую, как показано ниже, чтобы обновить токен:

POST:https://login.microsoftonline.com/{targetTenant}/oauth2/token
grant_type=refresh_token&client_id={clientId}&client_secret={client_secret}&resource={resource}&refresh_token={refresh_token_from_home_tenant}
person Fei Xue - MSFT    schedule 13.07.2017
comment
В этом ответе есть несколько неточностей. См. ответ Брайана ниже. - person Daniel Dobalian; 12.02.2019