azure - 在本地开发 Azure 函数

标签 azure azure-functions restful-authentication azure-ad-b2c azure-api-management

我领导着一个由 Azure 函数开发人员组成的大型团队。因此,微软引用的大多数使用 azure Web 界面的示例对我来说不起作用。我正在使用模拟器在本地开发Azure功能以节省一些成本。我通过 Visual Studio 将所有功能发布到我的集成环境中。

我正在开发一堆 Azure 函数,这些函数需要 API 网关来使用 Azure AD B2C 处理身份验证工作流。现在,没有可以在本地运行的 api 网关模拟器或 Azure AD B2C 模拟器。我的身份验证工作流程包括拦截对 api 的请求,将它们重定向到 AD B2C 进行身份验证,然后将身份验证 token 添加到 http header ,然后调用 http 触发的 azure 函数。

现在的问题是,如何测试身份验证工作流程? 如何设置 api 网关以将在 Visual Studio 中本地运行的函数注册为云中 api 网关的 api 端点?

最佳答案

如果您正在通过 Easy Auth 开发使用 Azure-AD 或 Azure B2C 的 SPA,那么这里是另一种选择。 ,这将为您执行 JWT token 验证,并让您执行以下操作:

您的 SPA 即使在本地也会获得 token ,因此请执行以下操作:

  1. 注入(inject)ClaimPrincipal进入你的函数
  2. 检查用户是否已通过身份验证(例如,principal.Identity.IsAuthenticated),如果未通过身份验证,则返回 UnauthorizedResult。
  3. 检查发行人声明。如果委托(delegate)人有一个,它会通过 Express Auth。您的 JWT token 已通过它的验证,您可以立即从中获取您的声明。
  4. 如果没有发行者,则属于本地开发,您可以转到 header 并自行提取 JWT token 并获取您的声明。您还可以将其 IFDEF 用于条件构建,以便双重确保它是本地开发。

以下是从 header 中提取 JWT token 的一些示例代码(HttpRequest 被注入(inject)到每个函数中):

private JwtSecurityToken ReadJwtTokenFromHeader(HttpRequest req)
{
   if (req.Headers.ContainsKey("Authorization"))
   {
       var authHeader = req.Headers["Authorization"];
       var headerValue = AuthenticationHeaderValue.Parse(authHeader);

       var handler = new JwtSecurityTokenHandler();
       return handler.ReadJwtToken(headerValue.Parameter);
   }

   return null;
}

注意:这需要 System.IdentityModel.Tokens.Jwt NuGet 包才能使用 JwtSecurityTokenHandler。

关于azure - 在本地开发 Azure 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49421027/

相关文章:

python - Azure Web 服务和 Django 日志

c# - Azure Function 和 Docker 出现错误

spring - 自定义 Spring Security 应用程序中的无限循环

java - 使用 google+ 的 api key 从 java 中的桌面应用程序发出请求

azure - 应用程序洞察分析自动运行查询和电子邮件结果

Azure DevOps 声纳云代码覆盖率问题

powershell - 如何使用powershell获取azure函数中的出队计数

node.js - Azure Function Javascript (NodeJS) CosmosDB 查询

visual-studio-code - VS Code 显示缺少对 AzureFunctions v1 fsx 文件的 netstandard 的引用

spring-security - OAuth2 - 检索 token 时选项请求的状态 401