【问题标题】:How to setup the Client Credential Flow for external applications with Azure Active Directory如何使用 Azure Active Directory 为外部应用程序设置客户端凭据流
【发布时间】:2019-04-10 12:02:14
【问题描述】:

我们得到以下情况:

外部网络

  • 1 一些我们无法控制的应用程序

内部网络:

  • 1 个内部 api(天蓝色函数)
  • Active Directory B2C

我想根据微软官方文档(first bullet point) 保护我的内部api。但要做到这一点,我们需要使用活动目录对客户端进行身份验证。

由于调用我们 api 的客户端是另一个应用程序(不是用户),我们需要根据 OAuth2 使用 客户端凭据流。然后,身份提供者必​​须向我提供一个包含自定义范围的令牌(对方可以检查)

不幸的是,在阅读了大量有关如何使用 Azure AD 的文档后,我无法检索包含自定义范围的 JWT 令牌。

我已经尝试在活动目录刀片中注册一个应用程序:

在其设置页面上,我尝试注册权限(这似乎是 AD 世界中的范围),但它只显示官方的 microsoft api。

如何为外部 api 添加权限?

使用应用密钥创建的令牌也不包含“scp”或“范围”声明。如何将范围声明放入令牌?

更新 1

我在 AD B2C Blade 中为我的 api (our-api) 注册了一个应用程序:

对于我在 AD Blade 中注册应用程序的客户端(TestClient 1TestClient 2):

TestClient 1 需要我的“our-api”应用程序的权限:

TestClient 2 不需要任何权限:

当我尝试使用 TestClient 1 登录 AD 时,我得到了预期的 access_token。但是,如果我尝试以 TestClient 2 身份登录,我也会得到一个 access_token。这个过程不应该失败吗?如何验证只有 TestClient 1 有权限?

【问题讨论】:

  • 您是否尝试在 Select an API 视图中进行搜索?默认情况下它只显示 MS 应用程序。
  • 此外,客户端凭据授予流程不会获得范围。这些特定于涉及用户的流程。您需要在您的情况下使用应用程序权限。因此 API 需要在其清单中定义应用权限,并且客户端应用必须要求这些权限(并获得他们的同意)。
  • 好吧,似乎搜索 API 确实有效。非常感谢您的提示。我仍然坚持整个权限/同意过程。外部客户端如何要求应用权限?
  • 是的,所以问题是您的 API 在您的租户中,因此他们不能要求对它的权限。您可能必须让您的 API 成为多租户,让他们同意,然后在他们的客户端应用程序上分配权限以调用您的 API。
  • 客户端未托管在 azure 上。我想这是一个问题? :)

标签: azure active-directory azure-active-directory azure-ad-b2c


【解决方案1】:

如何验证只有 TestClient 1 有权限?

你可以在jwt.io解析你的token,你可以检查token的权限。

v1 令牌示例

当我尝试使用 TestClient 1 登录 AD 时,我得到了预期的 access_token。但是,如果我尝试以 TestClient 2 身份登录,我也会得到一个 access_token。

首先,您可以使用任何应用程序为您可以在应用程序的 Requried 权限中找到的任何 API 获取 access_token,即使您尚未将它添加到应用程序的 Requried 权限中,但您不能使用此 access_token 来访问API 的资源,因为令牌没有权限。正如您所提到的,您创建了自己的 API,因此该 API 没有应用程序权限。并且在客户端凭据流程中,它不代表用户,因此只有应用程序权限在此流程中起作用,并且您的两个测试应用程序的令牌都没有权限。

【讨论】:

  • 如何将应用程序权限添加到我的 API?我的 api 权限仅显示为委派权限。
  • 这需要开发者来制作。
  • 哦,抱歉,我好像问错了问题。我无法将任何应用程序权限(角色)放入我的令牌中。但经过几个小时的反复试验,我想通了。我的 api 不是 AD 中的注册应用程序而不是 AD B2C,因为我需要编辑只能在标准 AD 中完成的应用程序清单。在那里我手动添加了应用权限,并从 AD 中的另一个注册应用中要求它。
猜你喜欢
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 2017-07-29
  • 2013-04-15
  • 2022-06-16
  • 2019-12-27
相关资源
最近更新 更多