Какой IUser использовать в AcquireTokenSilentAsync в MSAL

Я задаю этот вопрос в контексте мобильного приложения (Xamarin), использующего Azure AD B2C.

The tl; dr; из этого: Должен ли я всегда использовать IUser, полученный из политики «входа / подписки», при вызове PublicClientApplication.AcquireTokenSilentAsync?

Теперь позвольте мне немного объяснить сценарий.

Пользователь пытается использовать приложение, но ему необходимо немедленно сбросить пароль.

Используя библиотеку MSAL, PublicClientApplication.AcquireTokenAsync вызывается с помощью политики «сброса пароля».

В случае успешного вызова объект IUser помещается в коллекцию PublicClientApplication.Users.

Кроме того, токена, возвращенного в AuthenticationResult из этой функции, достаточно, чтобы позволить пользователю получить доступ к ресурсам, которым нужен токен AD B2C.

Тогда это означает, что любые будущие вызовы PublicClientApplication.AcquireTokenSilentAsync будут использовать IUser, который был связан с политикой «сброса пароля».

Это будет работать ... но это лучшая практика?

Или приложение должно немедленно предложить пользователю войти в систему, вызывая тем самым политику «подписка / вход» и, таким образом, добавить IUser, связанный с этой политикой, в коллекцию PublicClientApplication.Users. Тогда всякий раз, когда вызывается AcquireTokenSilentAsync, этот конкретный IUser может быть передан ему? (Вместо того, что указано в политике «сбросить пароль».)

Тот же вопрос можно задать всякий раз, когда вызывается политика «редактирования профиля». В коллекцию добавляется новый IUser, и, если пользователь уже выполнил вход в предыдущий, имеет ли значение, какой IUser отправлен на AcquireTokenSilentAsync?


person Matt Soucoup    schedule 19.01.2018    source источник


Ответы (1)


Мэтт, я предлагаю вам взглянуть на следующий образец active-directory- b2c-xamarin-native и, в частности, метод GetUserByPolicy(IEnumerable<User> users, string policy), расположенный в UserDetailsClient / MainPage.xaml.cs # L76-L85. Этот метод получает право IUser использовать данную политику.

foreach (var user in users) { string userIdentifier = Base64UrlDecode(user.Identifier.Split('.')[0]); if (userIdentifier.EndsWith(policy.ToLower())) return user; }

Его использование также показано в методе OnCallApi в UserDetailsClient / MainPage.xaml.cs # L116

person Jean-Marc Prieur    schedule 22.01.2018
comment
В качестве обновления любой IUser, возвращаемый описанным выше методом, действительно будет содержать работающий токен. От разработчика зависит, хотят ли они использовать этот токен или заставить пользователя снова войти в систему, если токен не соответствует правильной политике. - person Matt Soucoup; 07.03.2018