MSAL требует согласия пользователя для каждого входа в систему для WPF Desktop Application. - PullRequest
0 голосов
/ 28 февраля 2019

Я использую библиотеку MSAL.NET в приложении WPF для получения токена доступа для учетных записей MSA с помощью интерактивного рабочего процесса получения токена.Ниже приведен соответствующий фрагмент кода для получения токена:

PublicClientApplication PublicClientApp = new PublicClientApplication("The-Application-Id", "https://login.microsoftonline.com/consumers/", TokenCacheHelper.GetUserCache());
var authResult = await publicClientApplication.AcquireTokenAsync(new string[] { "email" });

, где TokenCacheHelper взят из документации .Это работает нормально, и я могу получить токен доступа и идентификационный токен в результате.Но если в следующий раз я войду в систему с использованием той же учетной записи, мне снова придется дать согласие на профиль и области электронной почты.Независимо от того, сколько раз я входил в систему и давал согласие, он все еще спрашивает меня о согласии.Я проверил свой текущий статус на account.live, и он говорит, что согласие на вышеуказанное заявление уже предоставлено.Я прошел через несколько документов, но не повезло.Может кто-нибудь предоставить какие-либо указатели?

Image describing repeated consent prompt for same user

PS Выше приведено конвергентное приложение, которое поддерживает нативное, и причина, по которой я не использую AcquireTokenSilentAsync, заключается в том, что я хочу несколькоУчетные записи MSA могут входить в приложение, установленное на том же устройстве.

Редактировать : я пытался использовать PublicClientApplication без кэша токена (таким образом, используя библиотеку по умолчанию) и по-прежнему такое же поведениенаблюдается.Чтобы лучше понять поведение, я захватил трассировку Fiddler во время входа в MSA с использованием MSAL.Из приведенной ниже трассировки наблюдаются обращения к / Consent / Update, что и является причиной того, что запрашивается согласие при каждом входе в систему.Есть идеи как это отключить?

enter image description here

1 Ответ

0 голосов
/ 06 марта 2019

Разработчики и ПО из команды MSA подтвердили, что это ожидаемое поведение.Они обновили документацию для отражения этой информации.Вот соответствующий раздел документа:

enter image description here

Подводя итог, если ваши пользователи используют приложение с одной учетной записью MSA на устройство, то рекомендуетсяШаблон использования MSAL гарантирует, что согласие запрашивается у пользователя только один раз [если кэш не будет каким-либо образом удален].Если ваши пользователи работают с несколькими учетными записями MSA на одно устройство, вы можете использовать приложение Public Client (созданное с использованием существующего кеша токенов), чтобы получить список учетных записей MSA, для которых кешируется токен.Используя пользовательский интерфейс, вы можете предоставить пользователю список учетных записей и, основываясь на его / ее выборе, получить токен доступа в автоматическом режиме, тем самым предотвращая экран согласия.Обратите внимание, что согласие может быть подчинено только до тех пор, пока остается кеш токена.Удаление файла кэша токена вынудит пользователя повторно войти в систему с согласия.

...