【发布时间】: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 1 和 TestClient 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