В MSAL есть пользовательский кеш, который требует от вас передавать User в ваших AcquireTokenSilentAsync
вызовах.
В случае Azure AD B2C записи пользователей в кэше MSAL не сопоставляются один к одному с пользователями B2C, а проецируются на разные используемые политики.
Итак, если у вас есть приложение, которое использует 3 политики для 1 пользователя, пользовательский кеш MSAL будет иметь 3 записи в пользовательском кеше.
С точки зрения кода это означает, что для использования MSAL вам необходимо:
- Имейте
GetUserByPolicy
вспомогательный метод, который получает соответствующую запись в кэше пользователя на основе политики и использует ее для получения пользователя, переданного в ваши вызовы AcquireTokenAsync
и AcquireTokenSilentAsync
.
- Убедитесь, что вы всегда передаете значение Authority в своих
AcquireTokenSilentAsync
вызовах.
Ошибка «Возвращенный идентификатор пользователя не совпадает с отправленным идентификатором пользователя» обычно возникает из-за того, что любой из этих двух параметров не выполняется правильно.
Из образца Azure AD B2C Xamarin:
AcquireTokenAsync
звонок:
AuthenticationResult ar = await App.PCA.AcquireTokenSilentAsync(App.Scopes, GetUserByPolicy(App.PCA.Users, App.PolicySignUpSignIn), App.Authority, false);
AcquireTokenSilentAsync
звонок:
AuthenticationResult ar = await App.PCA.AcquireTokenAsync(App.Scopes, GetUserByPolicy(App.PCA.Users, App.PolicySignUpSignIn), App.UiParent);
GetUserByPolicy
вспомогательный метод:
private IUser GetUserByPolicy(IEnumerable <IUser> users, string policy)
{
foreach (var user in users)
{
string userIdentifier = Base64UrlDecode(user.Identifier.Split('.')[0]);
if (userIdentifier.EndsWith(policy.ToLower())) return user;
}
return null;
}
person
Saca
schedule
07.07.2017