无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证
Posted
技术标签:
【中文标题】无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证【英文标题】:Unable to do Resource Owner Password OAuth2 authentication to API Management on Azure 【发布时间】:2020-01-19 20:15:28 【问题描述】:我有一个 Flutter 移动应用程序,它需要对 Azure API 管理后面定义的 Azure 函数进行身份验证和访问。我已经使用授权码授权对其进行了配置和测试,它工作正常(使用this 文章来指导我)。现在我想看看资源所有者密码授权是否有效并且我无法让它工作(基本上与上述文章中描述的相同,但对于资源所有者密码授权)。 我已经像这样重新配置了 API 管理 OAuth2 设置:
我还将移动客户端(在默认目录 - 应用注册 -> 我的移动应用客户端 -> 支持的帐户类型下)配置为公共客户端,以允许资源所有者密码凭据 (ROPC) 流(不确定是否需要这样做)。
当我执行身份验证时(即通过 password grant_type、client_id、用户密码、用户 id 和范围点击令牌端点)我收到以下错误(请注意,我在默认目录免费试用,如果有影响的话):
OAuth 授权错误(invalid_request):AADSTS90002:未找到租户''。如果租户没有活动订阅,则可能会发生这种情况。请咨询您的订阅管理员。
但我使用的令牌端点 URI 包含我正确的租户 ID,如果我在授权和令牌端点 URI 中使用相同的租户 ID 执行身份验证代码流,一切正常。
不确定要提供哪些其他信息以更好地进行诊断,所以请询问。
【问题讨论】:
您是如何测试 ROPC 流程的? 【参考方案1】:除了范围的值之外,配置都是正确的。由于您使用的是 v2.0 端点,它应该是api://backendapp_clientId/.default
。
我使用开发者门户对其进行了测试,它按预期工作。
也可以直接调用token端点进行测试。
【讨论】:
确实为默认范围提供了它,但仍然没有通过。同样的错误。 我仍然有这个问题。有人可以帮忙吗?【参考方案2】:我能够使用these 指令实现这一点,但不同之处在于我最初失败可能是因为我使用的是默认目录。一旦我创建了另一个目录,我就可以同时启动 Auth Code 和 Resource Owner Password 流程。
【讨论】:
以上是关于无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
没有 user_impersonation 的 Azure 资源管理 API,可以吗?