Azure APIM 和函数应用 Oauth2.0 Azure AD 身份验证

问题描述 投票:0回答:1

微服务编写在Function App中,APIM作为代理网关。授权和认证都是通过Oauth2.0和azure AD。

  1. 代币传播在哪里停止/结束?不是 APIM 吗?
  2. 如果是这样,API如何知道角色?是通过 HTTP 标头还是任何其他协议?
  3. 如何在函数API和APIM之间建立信任关系?正在使用 Azure 应用程序服务计划。
  4. 这个设计是否满足“零信任安全策略”?
azure oauth-2.0 azure-functions azure-api-management azure-security
1个回答
0
投票
  1. 代币传播在哪里停止/结束?不是 APIM 吗?

是的,通常令牌传播在 APIM 网关结束。客户端使用 Azure AD 进行身份验证以获取 OAuth2.0 令牌,并将其包含在请求中。 APIM 在将请求转发到后端 Azure Function App 之前验证这些令牌。

如果您想在 APIM 中缓存 token,可以将缓存策略添加到 API 的入站策略中。供您参考,apim-backend-OAuth2 身份验证 GitHub 文章。

  1. 如果是这样,API如何知道角色?是通过 HTTP 标头还是任何其他协议?

APIM 可以从令牌中提取声明并将其作为标头公开给后端 API。这些标头可以包含用户角色或权限等信息。然后后端 API 可以读取这些标头来做出授权决策。

当您在后端 API 上与 APIM 建立 Oauth2 连接时,它将验证每个传入请求的 jwt 策略和令牌,以及基于范围(例如 Files.Read、Users.Read 和委托)授予应用程序的角色或权限级别将用于客户端凭证流程。

我创建了函数应用程序作为后端应用程序,并创建了 APIM 作为后端的代理。使用这篇MS 文章,我创建了 OAuth2 授权并在 APIM 中为 API 启用了 Azure AD。

enter image description here

enter image description here

无需用户凭据即可登录开发人员门户来测试 API,因为客户端密钥和 ID 已添加到请求中进行验证,以及 OAuth2 形式的授权标头,并且在请求中提取并验证了来自 AD 的访问令牌本身。

函数API与APIM如何建立信任关系?

在 Azure 中,这种信任通常是通过使用 Azure AD 的服务到服务身份验证来建立的。您可以将 APIM 配置为使用客户端 ID 和密钥或证书向后端函数应用进行自身身份验证。这可确保函数应用仅接受来自受信任 APIM 网关的请求。

同样涉及 API 的授权(例如,功能应用程序),如何将授权密钥获取到 APIM 以及如何验证用户创建的授权密钥以及代理启用设置将从后端选项完成,如下所示:

enter image description here

这个设计是否满足“零信任安全策略”?

这里Azure AD用于身份验证,APIM用于API网关功能,每个访问请求都经过严格的身份验证和授权。但是,您还可以向 APIM API 添加许多入站策略,以更接近并增强安全性。

© www.soinside.com 2019 - 2024. All rights reserved.