#java #azure #oauth-2.0 #azure-active-directory #single-sign-on
#java #azure #oauth-2.0 #azure-active-directory #единый вход
Вопрос:
Я пытаюсь отправить запрос post https://login.microsoftonline.com/<My_Tenant_Id>/oauth2/token
из моего Java-кода, но я получаю сообщение об ошибке «invalid_grant: AADSTS50126: ошибка проверки учетных данных из-за неверного имени пользователя или пароля». Я проверил учетные данные, и они верны (я могу войти на портал Azure и просмотреть свое приложение AWS для единого входа). Я даже пытался выполнить тот же запрос от postman, но затем также возникла та же проблема.
Параметры, которые я передал, следующие:
"grant_type", "password"
"requested_token_type","urn:ietf:params:oauth:token-type:saml2"
"username", username
"password", password
"client_secret", clientSecret
"client_id", clientId
"resource", clientId
Я даже проверил различные документы Microsoft, но я все еще не могу решить эту проблему.
Кто-нибудь может сказать, в чем может быть проблема. является ли вызов API неправильным или неправильная настройка сервера.
Пожалуйста, обратите внимание: изначально мой вызов API работал, но затем я получил сообщение об ошибке invalid_request: AADSTS80014, затем оно автоматически разрешилось, и я начал получать invalid_grant: AADSTS50126. Кто-нибудь сталкивался с этой проблемой или знает, как это исправить. Спасибо!
Комментарии:
1. Я использую тот же текст запроса, что и ваш. Но для меня это работает нормально. Не могли бы вы предоставить скриншот запроса (включая тело запроса и ответ) в Postman? Не забудьте удалить идентификатор клиента, идентификатор клиента, секрет клиента, имя пользователя и пароль на скриншоте.
2. Вам все еще нужна помощь по этому вопросу?
3. Привет, Аллен, я могу решить эту проблему сейчас. Я создал облачного пользователя только для потока предоставления пароля владельца ресурса, и он работал, как ожидалось. Спасибо!
4. Рад это знать. Не могли бы вы добавить ответ, чтобы помочь другим?
Ответ №1:
Я могу решить эту проблему, создав пользователя только для облака. Причина, по которой у федеративного пользователя не удается выполнить поток предоставления пароля владельца ресурса, заключается в том, что для федеративного пользователя Azure AD должен перенаправить пользователя на определенный сервер федерации, который принадлежит локальному домену пользователя, чтобы сервер ADFS мог выполнить аутентификацию с помощью локального контроллера домена. В потоке предоставления пароля владельца ресурса это перенаправление невозможно, следовательно, оно не может подтвердить имя пользователя и пароль и, следовательно, эту ошибку.
В качестве предложения мы можем создать нового пользователя cloud only, имя пользователя и пароль которого должны находиться в Azure AD, чтобы при использовании потока предоставления пароля владельца ресурса мы отправляли учетные данные пользователя, AAD мог аутентифицировать пользователя без каких-либо перенаправлений.
Этот пользователь может быть обычным пользователем в AAD, и соответствующие делегированные разрешения должны присутствовать при регистрации приложения. Теперь еще одна вещь, в которой нужно убедиться: если делегированное разрешение, которое мы предоставляем, требует согласия администратора, то перед тем, как пользователь войдет в приложение, администратор должен предоставить согласие администратора на это делегированное разрешение. Если мы хотим, чтобы пользователь предоставил свое собственное согласие (если для делегированного разрешения требуется согласие пользователя), тогда нам нужно было бы каким-то образом предоставить согласие пользователя, прежде чем переходить к потоку предоставления пароля владельца ресурса.