java - 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。有没有人遇到过这个问题或知道如何解决这个问题。谢谢!
解决方案
我可以通过创建一个仅限云的用户来解决这个问题。联合用户使用资源所有者密码授予流程失败的原因是,对于联合用户,Azure AD 必须将用户重定向到属于用户的本地域的特定联合服务器,以便 ADFS 服务器可以关闭身份验证与本地域控制器。在资源所有者密码授权流程中,此重定向是不可能的,因此它无法验证用户名和密码,因此无法验证该错误。
作为建议,我们可以创建一个新的仅云用户,其用户名和密码应驻留在 Azure AD 中,以便在使用资源所有者密码授予流程时,我们提交用户的凭据,AAD 无需任何重定向即可对用户进行身份验证。
此用户可以是 AAD 中的普通用户,并且相应的委派权限应存在于应用注册中。现在要确保的另一件事是,如果我们提供的委派权限需要管理员同意,那么在用户登录应用程序之前,管理员必须向此委派权限提供管理员同意。如果我们希望用户提供他/她自己的同意(如果委派的权限需要用户同意),那么在继续资源所有者密码授予流程之前,我们必须以某种方式提供用户同意。
推荐阅读
- java - Spring Inject 泛型类型
- javascript - 为什么 ts-node 不编译打字稿文件?
- python - 如何避免在此递归函数中使用全局变量并改进我的代码?
- android - 当父母在Android中折叠时如何更改可扩展列表视图子项的视图?
- audio - DirectXTK make_unique
(标志)失败 - ios - iOS- UIAlert 仅在将应用程序图标更改为备用图标后才显示“确定”
- node.js - Node.js - 从超级用户目录读取数据
- c - 尽管 G_MESSAGES_DEBUG 设置为 all,但 GLib 不打印信息或调试日志级别
- arrays - 在条件 VLookUp 上生成不同的列表和求和
- ubuntu - 为什么我在使用 ffmpeg 时收到关于“{localtime”附近未终止的 %{} 的错误