invalid_grant:AADSTS50126:由于用户名或密码无效,验证凭证时出错

invalid_grant: AADSTS50126: Error validating credentials due to invalid username or password

我正在尝试从我的 Java 代码向 https://login.microsoftonline.com/<My_Tenant_Id>/oauth2/token 发出 post 请求,但我收到错误 "invalid_grant: AADSTS50126:由于用户名或密码无效,验证凭证时出错“。我已经验证了凭据并且它们是正确的(我能够登录到 Azure 门户并查看我的 AWS APP for SSO)。我什至尝试点击来自 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

我什至检查了各种微软文档,但我仍然无法解决问题。 任何人都可以告诉可能是什么问题。是 API 调用错误还是服务器设置错误。

请注意:最初我的 API 调用正常,但后来出现错误 invalid_request: AADSTS80014 然后它自动得到解决,我开始得到 invalid_grant:AADSTS50126。有没有人遇到过这个问题或知道如何解决这个问题。谢谢!

我可以通过创建仅限云的用户来解决此问题。联合用户在资源所有者密码授予流程中失败的原因是,对于联合用户,Azure AD 必须将用户重定向到属于用户本地域的特定联合服务器,以便 ADFS 服务器可以关闭身份验证与本地域控制器。在资源所有者密码授予流程中,此重定向是不可能的,因此无法验证用户名和密码,因此无法验证该错误。

作为建议,我们可以创建一个新的仅限云的用户,其用户名和密码应驻留在 Azure AD 中,以便在使用资源所有者密码授予流程时我们提交用户的凭据,AAD 可以在没有任何重定向的情况下对用户进行身份验证.

此用户可以是 AAD 中的普通用户,应用程序注册中应存在相应的委派权限。现在要确保的另一件事是,如果我们提供的委托权限需要管理员同意,那么在用户登录应用程序之前,管理员必须提供管理员对此委托权限的同意。如果我们希望用户提供 his/her 自己的同意(如果委托权限需要用户同意),那么我们必须在继续资源所有者密码授予流程之前以某种方式提供用户同意。