我正在开发一个 native 应用程序,该应用程序将允许用户连接到并管理他们的 Azure 订阅。为此,我在 Azure AD 中创建了一个具有以下委派权限的应用程序:
- 登录并阅读用户个人资料。
- 以组织用户身份访问 Azure 服务管理。
使用此应用程序的 ID,我可以连接到 Azure 常规区域中的 Azure 订阅。没有问题。
现在我想在 Azure 主权区域(具体来说是 Azure 中国和美国政府)做同样的事情。因此,我重复了相同的步骤,并在每个区域中创建了具有相同权限的应用程序。在这两个地方我都是应用程序所有者。
当我尝试在 Azure 中国区域使用该应用程序获取授权码时,一切都运行良好。我能够获取授权代码并使用该代码来获取访问 token 和刷新 token 。这是我使用的网址:
https://login.chinacloudapi.cn/common/oauth2/authorize?resource=https%3A%2F%2Fmanagement.core.chinacloudapi.cn%2F&client_id=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&response_type=代码+id_token&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_mode=fragment&nonce=1549417823964&state=12345
但是,当我对 Azure US Gov 执行相同操作时,我收到以下错误:
AADSTS650057: Invalid resource. The client has requested access to a resource which is not listed in the requested permissions in the client's application registration. Client app ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Resource value from request: https://management.core.usgovcloudapi.net/. Resource app ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. List of valid resources from app registration: 797f4846-ba00-4fd7-ba43-dac1f8f63013, 00000002-0000-0000-c000-000000000000. Trace ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Correlation ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Timestamp: 2019-02-06 02:19:50Z
这是我正在使用的请求 URL:
https://login-us.microsoftonline.com/common/oauth2/authorize?resource=https%3A%2F%2Fmanagement.core.usgovcloudapi.net%2F&client_id=xxxxxxx-xxxx-xxxx-xxxx- xxxxxxxxxxxx&response_type=code+id_token&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_mode=fragment&nonce=1549419561905&state=12345
如您所见,我使用 https://management.core.usgovcloudapi.net/
作为资源。这是基于Azure Government developer guide
。我什至尝试使用 https://management.usgovcloudapi.net/
但我得到了相同的结果。
此外我注意到一些事情:
- 如果我使用 Microsoft 的客户端 ID (
1950a258-227b-4e31-a9cf-717495945fc2
) 而不是我的应用程序 ID 和https://management.core.usgovcloudapi.net/
作为资源,一切正常。 - 如果我使用应用程序的 ID 和
https://management.core.windows.net/
作为资源,而不是https://management.core.usgovcloudapi.net/
code>,我得到了同意提示(否则我没有得到),所以我认为这也工作正常。
谁能告诉我我做错了什么?
最佳答案
此问题通常是由于 SSO 设置中的标识符不正确导致的。标识符设置不正确、格式不正确或者未在租户之间正确共享。
在应用程序的单点登录下,检查标识符字段是否填写正确。 (这是一个不同的示例,但显示了位置。)
我还建议使用 Fiddler 检查 SAML 响应,并确保您没有对该租户强制执行任何不必要的访问要求。
关于azure - 尝试在 Azure US Gov 中获取授权码时出现 "AADSTS650057: Invalid resource"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54545866/