Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Azure B2C对外部服务的web API进行授权_Azure_Asp.net Core_Azure Ad B2c - Fatal编程技术网

使用Azure B2C对外部服务的web API进行授权

使用Azure B2C对外部服务的web API进行授权,azure,asp.net-core,azure-ad-b2c,Azure,Asp.net Core,Azure Ad B2c,我在使用Azure B2C获取外部服务授权时遇到问题 我在ASP.NET内核中有一个web API,在前端有一个React应用程序。问题是,我还需要一些外部服务(自动)来访问这个API。虽然我可以在前端使用“正常”流(用户输入用户名和密码),但这对这些服务不起作用,因为它们不是用户(不能输入密码,更不用说它们不会打开网页) 我曾尝试使用应用程序机密获取授权令牌,但这种方式我无法真正判断哪个服务正在连接,因为它们有相同的声明,无论哪个机密用于令牌生成。我是否遗漏了什么,有没有办法知道哪一个是授权的

我在使用Azure B2C获取外部服务授权时遇到问题

我在ASP.NET内核中有一个web API,在前端有一个React应用程序。问题是,我还需要一些外部服务(自动)来访问这个API。虽然我可以在前端使用“正常”流(用户输入用户名和密码),但这对这些服务不起作用,因为它们不是用户(不能输入密码,更不用说它们不会打开网页)


我曾尝试使用应用程序机密获取授权令牌,但这种方式我无法真正判断哪个服务正在连接,因为它们有相同的声明,无论哪个机密用于令牌生成。我是否遗漏了什么,有没有办法知道哪一个是授权的,或者我需要完全不同的方法?

我们通常实现这一点的方法是:

  • 创建一个不适用于B2C用户的单独应用程序注册
  • 在此(批准)上定义一个或多个应用程序权限
  • 将这些应用程序权限分配给租户中需要以应用程序而不是代表用户调用API的应用程序
  • 使用客户端凭据流从AAD令牌终结点获取令牌(不是B2C令牌终结点)
  • 使用应用程序上配置的第二个身份验证方案授权请求,以接受基础Azure AD租户颁发的令牌(除了B2C策略),并检查令牌是否包含已定义的应用程序权限
  • 这种方法在当时是必要的,至少因为B2C本身不支持客户端凭证流(我认为现在仍然不支持)。 我们通常不关心哪个客户端应用正在连接,因为我们可以从令牌中的
    角色
    声明中看到授予它的应用权限。 但是,如果您需要该信息进行授权,您可以从
    appid
    声明中识别呼叫应用程序