在本地开发 Azure 函数

2024-01-07

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

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

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


如果您正在开发使用 Azure-AD 或 Azure B2C 的 SPA,这里是另一种选择轻松认证 https://learn.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad?toc=%2Fazure%2Fazure-functions%2Ftoc.json#-configure-with-express-settings,这将为您执行 JWT 令牌验证,并让您执行以下操作:

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

  1. 注入索赔本金 https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=csharp#working-with-client-identities进入你的函数
  2. 检查用户是否经过身份验证(例如,principal.Identity.IsAuthenticated),如果没有,则返回 UnauthorizedResult。
  3. 检查发行人索赔。如果委托人有一个,它会通过 Express Auth。您的 JWT 令牌已通过它的验证,您可以立即从中获取您的声明。
  4. 如果没有发行者,则属于本地开发,您可以转到标头并自行拉出 JWT 令牌并获取您的声明。您还可以将其 IFDEF 用于条件构建,以便您双重确定它是本地开发。

以下是从标头中提取 JWT 令牌的一些示例代码(HttpRequest 被注入到每个函数中):

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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在本地开发 Azure 函数 的相关文章

  • 如何在Jenkins上更改工作空间并建立记录根目录?

    我希望将 Jenkins 的数据写入驱动器 E 因为这是服务器上的大型驱动器 Jenkins 本身安装在 C 上 我怎么做 我看到的默认配置是 工作区根目录 ITEM ROOTDIR 工作区 构建记录根目录 ITEM ROOTDIR 构建
  • 在 selenium webdriver 中打开一个新窗口而不是新选项卡

    当在我的应用程序中手动单击链接时 它会在 Chrome 和 IE 中的新选项卡中打开 但是 当我的脚本运行时 该链接会在 IE 中的新窗口而不是新选项卡中打开 相同的脚本在 Chrome 中按预期运行 知道如何摆脱这个吗 更改 IE 的默认
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • Javascript/jQuery 外部高度()

    Does idOfLememt outerHeight 对所有浏览器产生相同的结果 IE7 有什么不同吗 只要去http api jquery com outerHeight http api jquery com outerHeight
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ
  • Angular 2:使用正则表达式进行数字验证

    我正在尝试验证 IE 11 中的数字字段
  • UWP 应用程序在与商店关联后崩溃

    我正在为 Windows 创建一个 cordova 应用程序 将应用程序与商店关联后 应用程序起始页变为白色空白 如果应用程序使用包标识名称 com something moretext 则该应用程序可以正常工作 但我的商店包身份名称是 5
  • Swift 中的 quitFirstResponder

    我怎样才能用Apple的新语言实现它 Objective C 代码 void touchesBegan NSSet touches withEvent UIEvent event for UIView view in self view s
  • 纯旧 PHP 对象 (POPO) 一词的确切含义是什么?

    我想了解一下波波 我搜索了 popo 发现它代表 Plain Old Php Object 但我不确定 Plain Old Php Object 的确切含义 我想知道什么是 popo 以及在哪里使用它 谢谢 普通旧 在此处插入语言 对象是一
  • 文本处理问题:删除其中一列不包含特定值的行

    我有一个制表符分隔的文件 如下所示 input sequence match sequence score receptor group epitope antigen organism ASRPPGGVNEQF ASRPPGGVNEQF
  • 如何用LoaderManager自动重新查询

    我有一个应用程序显示来自 SQLite DB 的数据 并且数据不断变化 所以显然 我认为我应该使用 LoaderManager 来显示数据 我读过一些关于将 LoaderManager 与 SQLite 结合使用的内容 然后看到了亚历克斯
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • 使用并非为 IOC 设计的遗留应用程序避免服务定位器反模式

    我经常读到IOC 中的服务定位器是一种反模式 http blog ploeh dk 2010 02 03 ServiceLocatorIsAnAntiPattern aspx 去年 我们在工作中的应用程序中引入了 IOC 具体来说是 Nin
  • 从 Teradata sql Assistant 将结果导出到 Excel 工作表

    我想通过在 Teradata SQL Assistant 中运行查询将结果导出到 Excel 工作表中 我使用了复制粘贴 但没有用 提前致谢 如果您将答案返回到 SQL Assistant 您应该能够从 文件 菜单中选择 保存答案集 然后
  • RavenDB:为什么我会在此多重映射/归约索引中获得字段空值?

    受到 Ayende 文章的启发https ayende com blog 89089 ravendb multi maps reduce indexes https ayende com blog 89089 ravendb multi m
  • 如何在 Symfony 4 中为测试环境设置数据库

    我对如何在 symfony 4 中为测试环境设置数据库感到困惑 我曾经在配置测试 ymlsymfony 3 及以下版本中的文件 最佳做法是什么 我应该重新创建一个学说 yaml文件输入配置 包 测试 该文档提到如何通过编辑 phpunit
  • 尝试了解天蓝色云服务中的负载平衡

    我正在维护一个天蓝色的云服务 它有 1 个 Web 角色和几个辅助角色 该网络角色有多个实例 当我从资源中打开云服务时 我可以看到服务端点和公共IP地址 我想了解这个蔚蓝云服务中的流量负载是如何平衡的 我搜索了负载均衡器 但在订阅中找不到它
  • 将 read.csv 与符号链接文件一起使用

    我正在尝试做什么 我的源文件非常大 我想避免将其复制到其他文件夹中 我决定创建一个指向大文件的符号链接并想使用read csv读取文件 文件夹结构 项目1 数据 源文件 csv 项目2 数据 别名到源文件 csv 什么地方出了错 读取源文件
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • OpenLayers 动画 getView().fit()

    我一直在研究 openlayers 的动画功能 我可以看到使用缩放到给定点和分辨率是多么简单 view animate center position zoom 11 但我不知道如何制作动画 map getView fit extent m
  • 通过 AWS ECS 在一个 EC2 实例中使用多个 docker 容器

    是否可以通过AWS ECS EC2容器服务 在一个EC2实例中运行多个docker容器 Yes AWS 文档 产品细节从未明确提及 但它谈到了向集群启动许多容器 一个集群可以是一个实例 配置容器时 https docs aws amazon
  • Vista 中 CEdit 中的 SetLimitText() 不起作用

    Vista 上就发生了这种情况 我创建了一个新的基于对话框的 MFC 项目来测试这一点 我在对话框中添加了一个 CEdit 控件 我调用 SetLimitText 让我的 CEdit 接收 100000 个字符 我都尝试过 this gt
  • 如何用Java编写“所有这些数字都不同”的条件?

    好的 我有这个问题要解决 但我无法正确地用 Java 编程 看下图 你会看到一个 6 角星 每个点和线的交点都是一个字母 作业是将数字 1 到 12 的位置设置为使得四个球的所有线的总和为 26 并且星形的所有 6 个点的总和也为 26 这
  • 使用 mod_rewrite 从 url 中删除两个子目录

    我正在尝试删除网站上的一些子目录 目前 当我需要访问用户设置时 我使用这个username mywebsite com public user settings php我希望它看起来像username mywebsite com setti
  • 来自具有不同长度的列表列表的 NumPy 数组(填充)[重复]

    这个问题在这里已经有答案了 我有一个这样的列表 lista 1 2 3 1 2 3 4 5 6 1 2 我想得到像这样的 numpy array 较短的列表元素扩展到最大长度 然后将尾部值设置为零 array 1 2 3 0 0 0 1 2
  • 在 Brunch 应用程序中使用 npm 模块会导致“找不到模块”

    我想使用这个节点库 https github com sudhirj simply deferred https github com sudhirj simply deferred I ran npm install simply def
  • ios7取消3次后无法登录游戏中心增益[重复]

    这个问题在这里已经有答案了 问题很奇怪 我的系统版本是IOS 7 在ios 7模拟器上一切正常 但是 当我尝试在 iPhone 上进行身份验证时 回调块中的错误始终是 GkErrorCanceled the requested operat
  • Objective C - 如何连接整个字符串数组?

    我是 Objective C 新手 我想编写一个方法 它接受一个字符串数组并返回一个连接字符串 每个字符串之间有一个逗号 所以如果一个数组是 a b c d 我想返回a b c d 最简单的方法是什么 方法有很多种 最简单的就是 yourA
  • 如何在Python脚本中设置PATH=%PATH%作为环境?

    我正在尝试从Python程序启动一个exe文件 该exe文件是使用Visual Studio编译的C 项目的输出 在此 c 项目的属性中 配置 gt 属性 gt 调试 gt 环境 中的以下设置 PATH PATH lib testfolde
  • 与库版本相关的 TypeScript @types 版本

    谁能解释一下 TypeScript types 背后的版本控制https github com DefinitelyTyped DefinitelyTyped https github com DefinitelyTyped Definit
  • 像 Facebook 一样从任何 URL 获取特定图像

    My Question might be looks like similar to other questions but really this is not according to my knowledge i can t unde
  • 开发算法的人和开发人员之间最有效的工作流程是什么?

    我们正在开发具有视频模式识别功能的软件 我们有 7 位数学家正在创建算法 另外 我们有 2 名开发人员使用这些算法维护 开发应用程序 问题在于数学家使用不同的开发工具来创建算法 例如 Matlab C C 另外 因为他们不是开发人员 所以不
  • Android 在单击按钮时返回到第一个 Activity

    我正在编写一个应用程序 其中处理 4 个活动 比方说 A B C 和 D 活动 A 调用 B B 调用 C C 调用 D 在每个活动上 我都有一个名为 home 的按钮按钮 当用户单击任何 B C D 活动中的主页按钮时 应用程序应该返回到
  • 如何创建列表的 numpy 数组?

    我想创建一个 numpy 数组 其中每个元素都必须是一个列表 因此稍后我可以向每个元素附加新元素 我已经在谷歌和堆栈溢出上查看过 但似乎无处可寻 主要问题是 numpy 假设你的列表必须成为一个数组 但这不是我想要的 正如你发现的那样 np
  • 如何从 ngGrid 中显示的按钮调用作用域方法 - 在 Angular js 中

    angular module harbinger controller Admin UserlistController function rootScope scope location http userService etc scop
  • 使用 Dagger 2 进行 Presenter 注入

    我刚刚开始使用 Dagger 2 我在网上发现了数千个指南 每个指南都有不同的实现 我现在有点困惑 所以基本上这就是我现在写的 应用程序模块 java Module public class AppModule Application mA
  • 如何获取属于自定义属性的属性?

    我需要从自定义属性中查找应用自定义属性的属性的类型 例如 MyAttribute string MyProperty get set 给定 MyAttribute 实例 我如何获取 MyProperty 的类型描述符 换句话说 我正在寻找
  • 可滚动 TextView 不允许在应用程序暂停后选择文本

    我有一个可滚动的TextView用户可以在其中选择文本 我通过将移动方法设置为来添加滚动条ScrollingMovementMethod Problem 除非应用程序暂停 例如 切换应用程序后 否则选择效果很好 一旦应用程序再次处于活动状态
  • 在本地开发 Azure 函数

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