Я пытаюсь интегрировать Microsoft sso с приложением Xamarin.Forms.
Я использую Microsoft.Identity.Client 4.7.1
Я изо всех сил пытаюсь войти в систему с разными учетными записями на одном устройстве, так как кажется, что первая учетная запись всегда выбирается независимо от того, что я делать.
- Пользователь A входит в систему
- Пользователь A выходит из системы
- Пользователь B входит в приложение, открывает веб-просмотр со страницей входа Microsoft и предлагает «Использовать другую учетную запись» Кнопка, но даже после ввода его учетной записи, веб-просмотр перенаправляет его обратно в мобильное приложение как пользователь A.
Вот код, который обрабатывает вход и выход:
private IPublicClientApplication _publicClientApplication;
public AuthService()
{
_publicClientApplication = PublicClientApplicationBuilder.Create(Constants.MicrosoftAuthConstants.ClientId.Value)
.WithAdfsAuthority(Constants.MicrosoftAuthConstants.Authority.Value)
.WithRedirectUri(Constants.MicrosoftAuthConstants.RedirectUri.Value)
.Build();
}
public async Task<string> SignInAsync()
{
var authScopes = Constants.MicrosoftAuthConstants.Scopes.Value;
AuthenticationResult authResult;
try
{
// call to _publicClientApplication.AcquireTokenSilent
authResult = await GetAuthResultSilentlyAsync();
}
catch (MsalUiRequiredException)
{
authResult = await _publicClientApplication.AcquireTokenInteractive(authScopes)
.WithParentActivityOrWindow(App.ParentWindow)
.ExecuteAsync();
}
return authResult.AccessToken;
}
private async Task<IAccount> GetCachedAccountAsync() => (await _publicClientApplication.GetAccountsAsync()).FirstOrDefault();
public async Task SignOutAsync()
{
var firstCachedAccount = await GetCachedAccountAsync();
await _publicClientApplication.RemoveAsync(firstCachedAccount);
}
Обходной путь должен использовать Prompt.ForceLogin
, но какой смысл в sso, если вам приходится каждый раз вводить учетные данные.