使用 Azure API Management 和 oAuth2 进行授权



我有一个托管在受Azure B2C(B)保护的Azure上的WebAPI (A),它由移动应用程序(C)调用 - 这一切都正常工作。

我现在想允许第三方在同一平台上通过 API 管理访问我的 API,但我对身份验证和"受众"感到非常困惑。

API 管理开发人员门户已根据 Azure 文档进行配置,以便当开发人员在门户上进行测试调用时,它会提示使用 B2C 域 (B) 进行身份验证。 为此,它使用针对 B2C 域注册的应用程序。

但是,当我想从第三方系统 (D) 实现 API 时,我需要允许系统在调用我的 API 时模拟用户 (A),以便在域 (B) 上经过身份验证的用户的上下文中执行操作。

我知道 B2C 尚不支持"代表"作为有效流,所以我使用 hellojs 在客户端上获取访问令牌,我通过自定义头将其传递给第三方系统 API,然后将其作为授权标头附加到它对 API 的调用。

API 管理产品需要一个"订阅密钥"来标识第三方实现可以使用的产品。

  1. 这是否意味着关于身份验证部分,使用我的API的每个第三方系统都将使用相同的oAuth"受众"ID,因此使用相同的Active Directory应用程序?

  2. 对我来说,每个第三方实现在 Azure AD 上都有不同的应用更有意义,但这意味着我的 Web API 需要识别大量受众 ID 和重定向 uri?

最后,如何"隐藏"Web API 终结点不让公众使用 - 使用受众 ID 肯定会让人们绕过 API 管理产品?

如果我混淆了任何术语,请道歉。

1)这是否意味着关于身份验证部分,每个 使用我的 API 的第三方系统将使用相同的 oAuth"受众"ID 因此相同的活动目录应用程序?

他们将使用相同的资源/范围 ID(即受众),例如https://yourwebapiAppIDURI/Read但它们都有自己的应用程序 ID。

2)对我来说,每个第三方实现更有意义 将在 Azure AD 上具有不同的应用程序,但这意味着我的 Web API 需要识别大量受众 ID 并重定向 乌里斯?

是的,他们应将其应用程序注册为客户端到 B2C 身份验证服务器。 应在 AAD 门户中设置第三方应用,以便对 Web API (."Access yourwebAPIname")。如果 Web API 公开任何范围,也可以委派对这些范围的访问权限。

现在,当他们通过将用户重定向到您的身份验证服务器来启动令牌请求时,他们应该提供其客户端 ID 和 Web API 应用程序 ID URL 的资源/范围值,例如https://yourwebapiAppIDURI/Read.

这应该会产生一个具有以下特征的令牌:

audhttps://yourwebapiAppIDURI/关联的应用程序 ID 的值

scpRead

好的,所以B2C不使用同意:

Azure AD B2C 不会征求客户端应用程序用户的同意。相反,所有同意都由管理员根据上述应用程序之间配置的权限提供。如果撤销了应用程序的权限授予,则以前能够获取该权限的所有用户将无法再这样做。

最新更新