跳转到主要内容

热门内容

今日:

  • 【数据治理】第一部分:利用联邦治理利用数据的潜力
  • 【人工智能】技术三明治和TRISM技术:构建人工智能集成的未来
  • 【GAN架构】GAN与transformer模型:比较架构和用途
  • 【开源合规】开源软件许可证101:GPL v3
  • 【同态加密】通过同态加密实现可搜索的加密:综合分析
  • 客户
  • 【数据架构】什么是实体关系图(ERD)?
  • 数字化运营
  • 云计算
  • 万物互联

总体:

  • 【数据集成】用于数据集成的10个最佳开源ETL工具
  • 【管理】热尔韦原理综述
  • 【Java框架】2022 年 17 个流行的 Java 框架:优缺点等
  • 【开源许可】从开源到免费和开源,MinIO现在在GNU AGPLv3许可
  • 【SAP】如何开始使用Sap AFS和Sap FMS。
  • 【数据目录】OpenMetadata与DataHub:比较架构、功能、集成等
  • 【数据治理】开源数据治理-2023年需要考虑的7个最佳工具
  • 【开源合规】使用MySQL许可:开源许可与商业许可
  • 【微服务架构】微服务已死——迷你服务万岁
  • 【SAP GUI】什么是SAP GUI(图形用户界面)以及如何使用它

最近浏览:

  • 【数据治理】第一部分:利用联邦治理利用数据的潜力
  • 【人工智能】技术三明治和TRISM技术:构建人工智能集成的未来
  • 【数据架构】什么是实体关系图(ERD)?
  • 【GAN架构】GAN与transformer模型:比较架构和用途
  • 客户
  • 【开源合规】开源软件许可证101:GPL v3
  • 【同态加密】通过同态加密实现可搜索的加密:综合分析
  • 【Microsoft 365】Microsoft 365客户数据的存储位置
  • 数字化
  • 【容器云】K3d vs k3s vs Kind vs Microk8s vs Minikube

热门内容

今日:

  • 【GAN架构】GAN与transformer模型:比较架构和用途
  • 【Rust】用Rust构建微服务
  • 【大语言模型】大语言模型评估器(LLM-as-Judge)效能深度评测
  • 企业架构
  • 【LLM】基础大型语言模型(LLM)和工具环境
  • 客户
  • 【数据治理】第一部分:利用联邦治理利用数据的潜力
  • 【DeepSeek】如何为自定义数据集微调DeepSeek-R1(一步一步)
  • 【应用架构】决策支持系统
  • 【开源合规】开源软件许可证101:GPL v3

总体:

  • 语言和框架
  • 【容器架构】Minikube vs.kind vs.k3s-我应该用哪一个?
  • 【数据集成】用于数据集成的10个最佳开源ETL工具
  • 【Java框架】2022 年 17 个流行的 Java 框架:优缺点等
  • 【技术选型】Keras、TensorFlow和PyTorch的区别
  • 【深度学习】45测试深度学习基础知识的数据科学家的问题(以及解决方案)
  • 【数据架构】什么是实体关系图(ERD)?
  • 【Rust架构】Rust web框架比较
  • 【知识】DIKW(数据,信息,知识,智慧)金字塔
  • 【技术选型】AMQP vs MQTT

最近浏览:

  • 【应用架构】决策支持系统
  • 【数据治理】第一部分:利用联邦治理利用数据的潜力
  • 【大语言模型】大语言模型评估器(LLM-as-Judge)效能深度评测
  • 【人工智能】技术三明治和TRISM技术:构建人工智能集成的未来
  • 【数据架构】什么是实体关系图(ERD)?
  • 【网络技术】TLS 1.2与1.3——握手、性能和其他改进
  • 【容器云】K3d vs k3s vs Kind vs Microk8s vs Minikube
  • 【GAN架构】GAN与transformer模型:比较架构和用途
  • 【Rust】用Rust构建微服务
  • 企业架构

首页
x

Main navigation

  • 主页
  • 数字化 +
    • 数字业务自动化
    • 数字化方案
    • 数字化转型战略
    • 数字化转型治理
    • 数字化运营
    • 数字化客户
      • 客户
    • 数字化研发
      • 研发
    • 数字化制造
    • 数字化生产
    • 数字化供应链
    • 数字化销售
    • 数字化服务
    • 数字化营销
      • 营销
    • 数字化财务
    • 人力资源
    • 数字化法务
  • 企业架构 +
    • 企业安全架构
    • 企业架构框架
    • 方案架构
  • 企业业务架构
  • 企业技术架构
  • 企业应用架构
  • 企业数据架构
  • 数据应用架构 +
    • 主数据架构
    • 大数据架构
    • 数据仓库架构
    • 数据保护
    • 数据库架构
    • 数据建模
    • 数据枢纽架构
    • 数据湖架构
    • 数据编制架构
    • 数据网格架构
    • 数据虚拟化架构
  • 集成架构 +
  • 架构质量 +
  • 软件架构 +
  • 大数据架构 +
    • Hadoop 生态
    • Saprk生态
    • 大数据战略
  • 数据和分析 +
    • 机器学习
    • 数据分析
    • 数据可视化
    • 数据工程
    • 数据战略
    • 数据挖掘
    • 数据科学
    • 商务智能
  • 数据库架构 +
    • MySql架构
    • PostgreSql架构
    • 云数据库
    • 内存数据库
    • 列式数据库
    • 图形数据库
    • 搜索引擎
    • 文档数据库
  • 数据治理
  • 数据管理 +
    • 数据仓库
    • 数据湖
  • 企业合规管理
  • 企业治理 +
  • 企业风险管理
  • 隐私保护
  • 智能转型 +
  • 云计算 +
    • AWS 平台
    • SaaS云
    • Salesforce
    • 云原生
    • 云架构
    • 云治理
    • 云转型战略
    • 容器云
    • 微软云
    • 私有云
  • 人工智能 +
  • 生成式人工智能 +
    • 多模态模型
    • 大视觉模型
    • 大语言模型
    • 大音频模型
  • 万物互联 +
    • 工业控制系统
    • 工业物联网
    • 物联网(IoT)安全
    • 物联网(IoT)架构
    • 物联网战略
    • 边缘计算
  • 元宇宙
  • 区块链 +
  • 安全 +
    • 云安全
    • 安全工具
    • 安全战略
    • 安全运营
    • 应用安全
    • 数据安全
    • 终端安全
    • 网络安全
    • 隐私保护
  • 基础设施 +
  • 软件开发 +
    • 开发管理
    • 需求分析
    • 低代码开发
  • 软件测试 +
  • 软件设计
  • DevOps +
  • 敏捷
  • 项目 +
  • 平台和工具 +
    • DevOps工具
    • 云计算平台
    • 企业事件枢纽
    • 其他工具
    • 分布式平台
    • 大数据平台
    • 应用中间件
    • 开发工具
    • 数据工具
    • 集成平台
  • 语言和框架 +
    • Go语言
    • Javascript开发
    • Java开发
    • Python开发
    • Rust语言
    • TypeScript开发
    • 前端技术和框架
    • 算法和数据结构
  • 硬件和设备 +
  • 产品 +
    • 产品管理
    • 产品设计
  • 技术 +
    • 技术趋势
    • 技术选型
  • 用户体验 +
  • IT管理 +
  • 商业 +
    • 商业模型
    • 商业管理
    • 商业结构
    • 商业计划
    • 商务沟通
    • 创业
      • 创业管理
    • 国际商务
    • 经济
  • 战略 +
  • 管理 +
  • 解决方案
  • 关注
  • 社区
  • 职业
  • 职业和职位 +
  • 咨询服务
  • 微软专栏

【Azure云】Azure上web服务的刷新令牌保护OAuth 2.0

  1. 首页 ⟶
  2. 【Azure云】Azure上web服务的刷新令牌保护OAuth 2.0
Chinese, Simplified
SEO Title
Secure OAuth 2.0 On-Behalf-Of refresh tokens for web services on Azure

category

  • 云计算

在开发web服务时,您可能需要使用OAuth 2.0代表(OBO)流来获取令牌。海外建筑运营管理局流服务于应用程序调用服务或web API的用例,而服务或web又需要调用另一个服务或web API。海外建筑运营管理局通过请求链传播委托的用户身份和权限。当应用程序需要无限期地使用访问和刷新令牌时,通常在离线访问场景中,安全地存储刷新令牌至关重要。

警告
仔细考虑存储任何安全令牌所涉及的风险和责任,因为这些令牌可能会让恶意行为者访问受组织的
Microsoft Entra ID保护的资源。针对任何组织目录(任何Microsoft Entra目录-多租户)中的帐户
的应用程序的安全漏洞可能特别严重。

存储访问令牌会带来更大的安全风险,因为访问令牌本身就可以访问资源。建议的方法不是存储访问令牌,
而是根据需要获取访问令牌。只安全地存储刷新令牌,就像它们是访问令牌一样严格。

如有必要,如果刷新令牌被破坏,您可以撤销它们。

潜在用例


此解决方案使用Azure密钥库、Azure功能和Azure DevOps来安全地更新和存储OBO刷新令牌。

架构


显示密钥和令牌刷新过程的图表。

Download a Visio file of this architecture.

流

  1. Azure密钥库为每个Microsoft Entra ID租户保存秘密加密密钥。
  2. Azure函数计时器触发的函数从密钥库获取最新的密钥。另一个Azure函数从Microsoft身份平台检索刷新令牌,并将其与最新的密钥版本一起保存。
  3. 数据库存储最新的加密密钥和不透明数据。
  4. Azure DevOps连续交付管道管理和同步秘密轮换和令牌刷新过程。
     

如果您已经将管道作为代码(IaC)或持续集成和交付(CI/CD)用于基础设施,那么Azure管道是添加关键轮换战略的方便场所。您不必使用Azure管道,只要您限制设置和检索机密的路径即可。

应用以下策略以允许Azure DevOps服务连接的服务主体在密钥保管库中设置机密。将<Key Vault Name>和<Service Connection Principal>变量替换为适合您的环境的正确值。

az keyvault set-policy --name $<Key Vault Name> 
--spn $<Service Connection Principal> --secret-permissions set


将Azure管道设置为创建和更新密钥后,可以安排管道定期运行。管道将更新密钥库密钥以与密钥旋转同步,并将加密的令牌与新的密钥版本一起保存。有关详细信息,请参阅配置管道的时间表。

托管身份


Azure功能等Azure服务访问密钥库的首选方式是使用该服务的托管身份。您可以通过Azure门户、Azure CLI或通过用于IaC场景的Azure资源管理器(ARM)模板授予访问权限。

Azure门户


在Azure门户中,添加密钥保管库访问策略,以允许Azure功能托管的身份对象ID获取和设置机密。有关更多信息,请参阅为应用程序服务和Azure功能添加系统分配的标识和使用密钥库参考。


Azure CLI


您还可以使用Azure CLI设置Azure密钥保管库策略:

Azure CLI

az keyvault set-policy --name $<Key Vault Name> 
--spn $<Service Connection Principal> --secret-permissions set
az keyvault set-policy --name $<Key Vault Name> 
--spn $<Managed Identity Principal> --secret-permissions get


ARM模板


以下ARM模板允许Azure功能访问Azure密钥库。将***变量替换为适合您的环境的正确值。

JSON

{
 "type": "Microsoft.KeyVault/vaults",
 "apiVersion": "2019-09-01",
 "name": "***",
 "location": "***",
 "properties": {
   "sku": {
     "family": "A",
     "name": "standard"
   },
   "tenantId": "***",
   "enableSoftDelete": true,
   "enabledForDeployment": false,
   "enabledForTemplateDeployment": false,
   "enabledForDiskEncryption": false,
   "accessPolicies": [
     {
       "tenantId": "***",
       "objectId": "<Managed Identity Principal>",
       "permissions": {
         "secrets": [
           "get"
         ]
       }
     },
     {
       "tenantId": "***",
       "objectId": "<Service Connection Principal>",
       "permissions": {
         "secrets": [
           "set"
         ]
       }
     }
   ]
 }
}


Token存储


您可以使用任何数据库以加密形式存储令牌。下图显示了在数据库中存储刷新令牌的顺序:

该序列有两个函数,userId()和secretId()。您可以将这些函数定义为token.oid、token.tid和token.sub的某种组合。有关更多信息,请参阅使用id_token。

将加密密钥存储为机密后,您可以在Azure密钥库中查找该密钥的最新版本。

Token使用


使用密钥很简单。以下序列根据最新的密钥版本查询密钥。

令牌刷新与DoWork函数正交,因此Azure函数可以通过使用耐用函数异步执行DoWork和令牌刷新。有关具有耐用函数的HTTP触发函数的更多信息,请参阅HTTP功能。

不建议在HTTP请求管道中使用Azure密钥保管库,因此请在合理的时候缓存响应。在本例中,Key Vault对getSecret(secretId,secretVersion)调用的响应是可缓存的。

密钥轮换和令牌刷新


您可以在刷新刷新令牌的同时旋转密钥,因此最新的令牌将使用最新版本的加密密钥进行加密。此进程使用内置的Azure函数支持计时器触发器。有关详细信息,请参阅Azure函数的计时器触发器。

以下序列图说明了将令牌刷新与密钥旋转同步的过程:


用户和访问控制


Microsoft身份平台提供了在发生泄露时撤销刷新令牌的功能。请参阅令牌吊销和吊销AzureADUserAllRefreshToken。

笔记
自2024年3月30日起,Azure AD和MSOnline PowerShell模块已弃用。要了解更多信息,请阅读弃用更新。
在此日期之后,对这些模块的支持仅限于对Microsoft Graph PowerShell SDK的迁移帮助和安全修复。
弃用的模块将继续运行至2025年3月30日。

我们建议迁移到Microsoft Graph PowerShell以与Microsoft Entra ID(以前的Azure AD)交互。有关常见的迁移问题,请参阅迁移常见问题解答。注:MSOnline的1.0.x版本可能会在2024年6月30日之后出现中断。

要从Microsoft Entra ID中删除用户,只需删除该用户的记录。要删除每个用户的应用程序访问权限,请删除用户数据的refreshToken部分。

要删除一组用户(如目标租户中的所有用户)的访问权限,可以使用Azure Pipelines基于secretId()删除该组的机密。


Next steps

  • Microsoft identity platform and OAuth 2.0 On-Behalf-Of flow
  • How to use managed identities for App Service and Azure Functions
  • Use Key Vault references for App Service and Azure Functions
  • Securing Azure Functions
 
 

本文地址
https://architect.pub
  • 登录 发表评论
  • 10 次浏览
发布日期
星期一, June 10, 2024 - 15:57
最后修改
星期一, June 10, 2024 - 15:57

Tags

  • Azure
  • OAuth 2.0
  • On-Behalf-Of
Article
Read more

网站备案号:京ICP备2022026098号-2

友情链接

  • CPO宝典
  • 全球IT瞭望
  • 开发者开聊
  • 智能化转型智库
  • 架构师研究会

知识星球

知识星球:首席架构师圈

 

抖音直播

抖音:cea_cio(超级架构师)
干货直播,干货分享

 

微信小号

超级架构师
超级架构师小号:加群,私聊

 

微信公众号

超级架构师公众号

 

QQ群:超级架构师

QQ Group

Tags

Tags

  • Azure
  • OAuth 2.0
  • On-Behalf-Of
© 2025 架构师研究会, All rights reserved.
↑