我有一个由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产品需要"订阅密钥"识别第三方实现可以使用的产品。
这对于身份验证部分是否意味着使用我的API的每个第三方系统都会使用相同的oAuth"观众" id和因此相同的Active Directory应用程序?
对我来说更有意义的是,每个第三方实施在Azure广告上都有不同的应用,但这意味着我的Web API需要识别大量的受众ID并重定向uris?
最后,我如何隐藏"公共使用的Web API端点 - 当然使用受众ID会让人们绕过API管理产品吗?
如果我混淆了任何术语,请道歉。
答案 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/
值
scp
值Read
答案 1 :(得分:0)
好的,所以B2C不使用同意:
Azure AD B2C不会要求您的客户端应用程序用户同意。相反,管理员根据上述应用程序之间配置的权限提供所有同意。如果撤消了对应用程序的权限授予,则之前能够获得该权限的所有用户将无法再这样做。