使用Azure API Management和oAuth2

时间:2018-03-12 16:06:15

标签: oauth-2.0 azure-ad-b2c azure-api-management

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

我现在想让第三方在同一平台上通过API管理访问我的API,但我对身份验证和#34;观众"非常困惑。

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

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

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

API Management产品需要"订阅密钥"识别第三方实现可以使用的产品。

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

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

  3. 最后,我如何隐藏"公共使用的Web API端点 - 当然使用受众ID会让人们绕过API管理产品吗?

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

2 个答案:

答案 0 :(得分:1)

  

1)这对于认证部分是否意味着每一个   使用我的API的第三方系统将使用相同的oAuth“受众”ID   因此相同的Active Directory应用程序?

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

  

2)每个第三方实施对我来说更有意义   会在Azure广告上使用不同的应用,但这意味着我的Web API   需要识别大量的受众ID并重定向   的URI?

是的,他们应该将他们的应用程序注册为您的B2C Auth服务器的客户端。 应在AAD门户中设置第三方应用程序,以获得对您的Web API的委派访问权限(。“Access yourwebAPIname”)。如果您的Web API公开了任何作用域,那么也可以委派对它们的访问权限。

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

这应该会产生一个令牌:

aud

关联的应用ID的

https://yourwebapiAppIDURI/

scpRead

答案 1 :(得分:0)

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

  

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