Я разрабатываю приложение Python/Flask и хочу использовать OAuth для входа. Мой работодатель использует Azure Active Directory, поэтому я пытаюсь интегрироваться с ним в качестве поставщика OAuth.
Я не являюсь администратором арендатора Azure.
Я создал регистрацию приложения и настроил свой код в соответствии с документацией Microsoft, но я единственный человек, который может успешно войти в приложение.
Я создаю свой URL-адрес авторизации следующим образом (у меня есть правильное имя клиента, идентификатор клиента и URI перенаправления в моем коде):
import urllib.parse
import uuid
authorization_endpoint = 'https://login.microsoft.com/my-tenant.onmicrosoft.com/oauth2/authorize'
query = {
'client_id': 'my-client-id',
'nonce': uuid.uuid4(),
'redirect_uri': 'https://my-app.example.com/authorize',
'response_mode': 'form_post',
'response_type': 'id_token',
'scope': 'openid',
'state': uuid.uuid4()
}
authorization_url = f'{authorization_endpoint}?{urllib.parse.urlencode(query)}'
Когда я лично тестирую вход в приложение, все работает нормально. Но когда кто-то еще пытается, они посещают URL-адрес авторизации, входят в систему со своими учетными данными, а затем получают страницу с этой ошибкой:
AADSTS165000: Invalid Request: The request tokens do not match the user context. Do not copy the user context values (cookies; form fields; headers) between different requests or user sessions; always maintain the ALL of the supplied values across a complete single user flow. Failure Reasons:[Token values do not match;]
Почему это работает для меня и больше ни для кого?
Конечная точка авторизации неверна. Должно быть https://login.microsoftonline.com/...
вместо https://login.microsoft.com/...
.
Когда я увидел этот ответ, я не поверил, что это правильно. Но на самом деле Microsoft допускает такие ситуации: одно и то же приложение и тот же пользователь успешно аутентифицируются с логин.микрософт.com. Затем мне нужно было добавить некоторые разрешения в область действия и вуаля: я получаю AADSTS165000. Это было решено после перехода на логин.микрософтонлайн.com. С тем же приложением и тем же пользователем. Я уверен, что это нигде не задокументировано. Спасибо!