Azure Functions App with APIM 使用托管标识 - 身份验证和授权
Posted
技术标签:
【中文标题】Azure Functions App with APIM 使用托管标识 - 身份验证和授权【英文标题】:Azure Functions App with APIM using Managed Identity - Authentication and Authorization 【发布时间】:2021-10-30 21:42:42 【问题描述】:我正在使用托管标识在 Azure Functions 下创建一个应用程序,并在 APIM 下作为 API 导入。使用托管标识、自定义标头和 jwt-policy 来限制它以进行令牌验证。
我的应用程序的用户要么来自移动客户端,要么来自网络客户端 SPA。我不想要用于登录或注册的 Oauth2 同意屏幕。
但在托管身份下,我如何处理到达用户的请求?识别每个用户请求的唯一令牌,并在以后使用它来维持移动应用程序或 Web SPA 上的会话寿命。
我不确定我需要使用哪些服务才能使此流程正常运行。很清楚的是,我希望所有使用我的应用程序的用户,无论是移动设备还是网络连接,并通过 APIM 调用我的 Function APP API。然后,在同意或 oauth 流等方面不涉及用户交互。
有人可以指导我吗?对于正确的路径,使用什么以及何时满足此要求。我经历了很多选择。 Azure B2C 或 B2b 不是我的选择。它涉及用户同意。
更新: 现在的工作方式如下:
在以前的现有基础架构上:
我们正在使用我们自己的带有 JWT 身份验证的 Symfony API 来做这件事。 由于某些业务需求,我们不希望用户知道我们是否 已从一个云迁移到另一个云。但同时我们 正在从 RESTful API 转移到 Azure Functions。 这就是为什么我们希望用户不知道我们所做的更改和 他们的一切都应该按原样工作
我正在尝试在 Azure Current 中:
在 Azure 中,我在 APIM 下使用托管配置了 Azure Functions 身份+ JWT-验证。哪个工作正常。但其余的混乱 留在那里。我如何拥有唯一的用户令牌和会话 Azure 设置等
用户通常会提供他们的用户名/密码,然后点击 示例登录请求。然后它到达 APIM,得到 身份验证通过托管身份策略,然后命中 功能分配的托管标识。我从上下文变量中获取令牌 然后将其传递给 JWT-Validation Policy。下一阶段是 对每个用户的令牌存储位置以及后续步骤如何工作感到困惑?
这是否有可能在改变堆栈和底层技术的同时创造如此无缝的体验?
谢谢
【问题讨论】:
使用 Azure AD B2C 或 B2B,管理员可以为所有用户授予同意,因此用户不必授予同意。另外不征求同意的原因是什么?这只是一次性同意。 @Thomas 实际上应用程序模型是不同的。由于某些业务需求,我们不希望用户知道我们是否已从一个云迁移到另一个云。但与此同时,我们正在从 RESTful API 转向 Azure Functions,以应对一切。这就是为什么我们希望用户不知道我们所做的更改,并且他们的一切都应该按原样工作。 目前你如何认证用户? @Thomas 我们正在使用我们自己的带有 JWT 身份验证的 Symfony API 来做这件事。在 Azure 中,我在 APIM 下使用托管标识 + JWT 验证配置了 Azure 函数。哪个工作正常。但是其余的混乱仍然存在。如何使用该 Azure 设置等拥有唯一的用户令牌和会话。 您的意思是 APIM 正在使用托管身份对函数应用进行身份验证? 【参考方案1】:HTTP 触发的 Azure Functions 通过 APIM 向公共 Internet 公开。因此,如果我们想将它们用作应用程序的一部分,那么我们需要保护这些功能免受任何攻击。
API 是使用函数应用等应用服务创建的,并使用 APIM 策略设置为 APIM 的后端。 APIM 还使用与 Azure Active Directory 绑定的托管标识。
解决问题的方法是使用 JSON Web Token (JWT)。如果您决定使用 JWT 令牌对 API 进行身份验证,则“validate-jwt”策略应位于“authentication-managed-identity”策略之前。否则,“Authorization”标头将在有机会被验证之前被替换。
查看以下文档了解更多信息。
Azure AD authentication based on JWT token.
Authenticate and Authorize Azure Function with Azure Web App Using MSI.
【讨论】:
以上是关于Azure Functions App with APIM 使用托管标识 - 身份验证和授权的主要内容,如果未能解决你的问题,请参考以下文章
azure functions 或 azure logic app 中是不是有任何触发 Azure File Share 的触发器?
appsettings.json 值在 Azure Functions App V3 中未绑定
Azure App Function (Functions 2.x):通过 HTTP 函数在 CosmosDB 中创建新文档
使用Azure Functions在Azure blob中运行exe