【问题标题】:Azure Function AAD Authentication - Client Credentials FlowAzure Function AAD 身份验证 - 客户端凭据流
【发布时间】:2021-09-01 22:07:17
【问题描述】:

我正在尝试弄清楚如何保护只能从同一租户中的另一个 azure 函数(客户端 func)调用的 azure 函数(服务函数)。

这是我在 azure 门户中尝试过的:

  • 根据消费计划创建了一个 Windows 函数应用
  • 添加了一个 hello-world http 触发功能,授权级别为“匿名”
  • 测试我可以匿名调用函数
  • 在服务功能的刀片上,选择“身份验证”
    • 已选择“添加身份提供者”
    • 选择“微软”
    • “创建新应用注册”
    • “当前租户 - 单租户”
    • “需要身份验证”、“HTTP 401”
  • 为客户端函数创建了一个新的应用注册,记下 client_id 和 client_secret

然后,我将邮递员配置为从 azure 广告中获取令牌(使用唯一的租户 ID),并从客户端函数的应用注册中传递 client_id 和 client_secret。在 /token 端点的帖子中,我给出了“client_credentials”的grant_type 值。

在发布邮递员的请求时,我收到了包含 access_token 的响应。我复制并粘贴到https://jwt.ms 以检查一切是否正常。

我在邮递员中配置了另一个请求来发出对 hello-world 函数的获取。这包含一个值为“Bearer”的“Authorization”标头 + 在上一步中收到的 access_token。

尽管传递了看似有效的访问令牌,但函数应用(没有身份验证绑定)返回 401 Unauthorized 错误。

我不需要授权,只需要身份验证。

谁能发现我哪里出错了?

【问题讨论】:

  • 客户端应用程序是否具有从主应用程序分配的必要 API 权限?这可能是出现错误的原因之一。

标签: oauth-2.0 azure-active-directory azure-functions azure-web-app-service


【解决方案1】:

我现在有这个工作。我发现以下页面很有帮助:Microsoft Doc

关键点:

  • 在服务应用的应用注册上声明的应用角色
  • 我没有在“公开 API”页面中手动输入任何内容
  • “公开 API”页面上没有列出授权的客户端应用程序
  • 获取访问令牌时,范围应设置为目标服务应用注册的Application ID URI + "/.default"
  • 客户端服务的应用注册上设置的 API 权限 - 这些是“应用程序权限”而不是“委派权限”
  • 从函数应用中,选择身份验证,然后编辑身份提供者。 “允许的令牌受众”的值需要是目标应用服务的应用注册的“应用程序 ID URI”值中的 api://guid 值。我注意到在为此使用非指导值时遇到问题

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2021-02-02
    • 2016-07-02
    • 2022-01-24
    • 2020-08-10
    • 2017-06-20
    相关资源
    最近更新 更多