首页 > 解决方案 > invalid_grant:AADSTS50126:由于用户名或密码无效,验证凭据时出错

问题描述

我试图https://login.microsoftonline.com/<My_Tenant_Id>/oauth2/token从我的 Java 代码中发出一个发布请求,但我收到错误"invalid_grant: AADSTS50126: Error validate credentials due to invalid username or password"。我已经验证了凭据并且它们是正确的(我能够登录到 Azure 门户并查看我的 AWS APP for SSO)。我什至尝试从邮递员那里收到相同的请求,但也遇到了同样的问题。

我传递的参数是:

"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。有没有人遇到过这个问题或知道如何解决这个问题。谢谢!

标签: javaazureoauth-2.0azure-active-directorysingle-sign-on

解决方案


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

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

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


推荐阅读