【Azure Logic App】使用 Easy Auth 在标准逻辑应用(Standard Logic App)中触发工作流

简介: 【Azure Logic App】使用 Easy Auth 在标准逻辑应用(Standard Logic App)中触发工作流

问题描述

对于Standard Logic App,当使用HTTP请求来触发一个Workflow时,默认固定不变的SAS签名认证,因并且随着URL传递,存在泄露风险。

是否可以用Header中使用Bearer Token来进行验证呢?

 

问题解答

可以的,为Standard Logic App开启Easy Auth。

Easy Auth 使通过触发器对工作流调用进行身份验证成为可能。可以将 Easy Auth 用作一种更安全的身份验证方法,使用有过期时间要求的访问令牌,而不是使用共享访问签名 (SAS) 令牌。

基本上,Easy Auth 提供了使用托管标识进行身份验证时可用的所有优势 。要设置授权策略,需要通过REST API 设置 Auth Settings V2。 本文介绍如何以这种方式启用和使用轻松身份验证,以对发送到标准逻辑应用工作流中的请求触发器的调用进行身份验证。

 

第一步:调用 authsettingsV2 接口

PUT:  https://management.chinacloudapi.cn/subscriptions/<Subscriptions ID>/resourceGroups/<Resource Group>/providers/Microsoft.Web/sites/<Logic App Name>/config/authsettingsV2?api-version=2023-01-01

 

第二步:替换占位符值(如 <subscriptionId>)为要使用的实际值

"globalValidation": { 
   "requireAuthentication": true,
   "unauthenticatedClientAction": "AllowAnonymous"
}

保持 Boby 中 requireAuthentication 值为 true。其它值根据实际修改。主要需要修改的值有:

- identityProviders.azureActiveDirectory.openIdIssuer:Azure AD 的令牌颁发者
- identityProviders.azureActiveDirectory.clientId:AAD 应用注册的 ID。这将作为允许的受众进行扩充。

- identityProviders.azureActiveDirectory.validation.allowedAudiences:包含令牌允许的受众值的数组

- identityProviders.azureActiveDirectory.validation.defaultAuthorizationPolicy.allowedPrincipals.identities:包含 Azure AD 标识的对象 ID 的数组,例如用户/组

附上全部的Body内容

{
    "id": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Web/sites/{logicAppName}/config/authsettingsV2",
    "name": "authsettingsV2",
    "type": "Microsoft.Web/sites/config",
    "location": "{locationOfLogicApp}",
    "tags": {},
    "properties": {
        "platform": {
            "enabled": true,
            "runtimeVersion": "~1"
        },
        "globalValidation": {
            "requireAuthentication": true,
            "unauthenticatedClientAction": "AllowAnonymous"
        },
        "identityProviders": {
            "azureActiveDirectory": {
                "enabled": true,
                "registration": {
                    "openIdIssuer": "{issuerId}",
                    "clientId": "{clientId}"
                },
                "login": {
                    "disableWWWAuthenticate": false
                },
                "validation": {
                    "jwtClaimChecks": {},
                    "allowedAudiences": [
                        {audience1},
                        "{audience2}"
                    ],
                    "defaultAuthorizationPolicy": {
                        "allowedPrincipals": {
                            "identities": [
                                "{ObjectId of AAD app1}",
                                "{ObjectId of AAD app2}"
                            ]
                        }
                    }
                }
            },
            "facebook": {
                "enabled": false,
                "registration": {},
                "login": {}
            },
            "gitHub": {
                "enabled": false,
                "registration": {},
                "login": {}
            },
            "google": {
                "enabled": false,
                "registration": {},
                "login": {},
                "validation": {}
            },
            "twitter": {
                "enabled": false,
                "registration": {}
            },
            "legacyMicrosoftAccount": {
                "enabled": false,
                "registration": {},
                "login": {},
                "validation": {}
            },
            "apple": {
                "enabled": false,
                "registration": {},
                "login": {}
            }
        },
        "login": {
            "routes": {},
            "tokenStore": {
                "enabled": false,
                "tokenRefreshExtensionHours": 72.0,
                "fileSystem": {},
                "azureBlobStorage": {}
            },
            "preserveUrlFragmentsForLogins": false,
            "cookieExpiration": {
                "convention": "FixedTime",
                "timeToExpiration": "08:00:00"
            },
            "nonce": {
                "validateNonce": true,
                "nonceExpirationInterval": "00:05:00"
            }
        },
        "httpSettings": {
            "requireHttps": true,
            "routes": {
                "apiPrefix": "/.auth"
            },
            "forwardProxy": {
                "convention": "NoProxy"
            }
        }
    }
}

 

第三步:发送PUT请求,返回200,Easy Auth配置成功

 

第四步:最后使用 Azure AD OAuth 调用请求触发器

若要使用 Azure AD OAuth 在工作流中调用请求触发器,请使用以下语法在查询参数中传递 Authorization 标头,但不传递 SAS 令牌,从而将请求发送到回调或调用 URL:

POST / GET:


https://XXXXX.chinacloudsites.cn:443/api/XXXXX/triggers/When_a_HTTP_request_is_received/invoke?api-version=2022-05-01&sp=%2Ftriggers%2FWhen_a_HTTP_request_is_received%2Frun&sv=1.0

 

[end]

 

 

 

参考资料

Trigger workflows in Standard logic apps with Easy Auth : https://techcommunity.microsoft.com/t5/azure-integration-services-blog/trigger-workflows-in-standard-logic-apps-with-easy-auth/ba-p/3207378


Enable Microsoft Entra ID Open Authentication (Microsoft Entra ID OAuth) : https://learn.microsoft.com/en-us/azure/logic-apps/logic-apps-securing-a-logic-app?tabs=azure-portal&ref=hybridbrothers.com#enable-microsoft-entra-id-open-authentication-microsoft-entra-id-oauth

 

 

相关文章
|
11月前
|
存储 安全 Linux
【Azure App Service】在App Service中查看CA证书
在 Azure App Service 中,使用自签名或私有 CA 证书的远程服务可能会导致 SSL 握手失败。解决方法包括使用受信任 CA 签发的证书,或通过 App Service Environment 加载自定义根证书,实现安全连接。
242 4
|
10月前
|
移动开发 小程序 Android开发
基于 uni-app 开发的废品回收类多端应用功能与界面说明
本文将对一款基于 uni-app 开发的废品回收类多端应用,从多端支持范围、核心功能模块及部分界面展示进行客观说明,相关资源信息也将一并呈现。
306 0
|
域名解析 网络协议 API
【Azure Container App】配置容器应用的缩放规则 Managed Identity 连接中国区 Azure Service Bus 问题
本文介绍了在 Azure Container Apps 中配置基于自定义 Azure Service Bus 的自动缩放规则时,因未指定云环境导致的域名解析错误问题。解决方案是在扩展规则中添加 `cloud=AzureChinaCloud` 参数,以适配中国区 Azure 环境。内容涵盖问题描述、原因分析、解决方法及配置示例,适用于使用 KEDA 实现事件驱动自动缩放的场景。
253 1
|
9月前
|
Java 应用服务中间件 API
【App Service】部署War包到Azure云上遇404错误
Java应用部署至Azure App Service for Windows后报404,本地运行正常。经排查,日志提示类文件版本不兼容:应用由Java 17(class file version 61.0)编译,但环境仅支持到Java 11(55.0)。错误根源为Java版本不匹配。调整App Service的Java版本至17后问题解决,成功访问接口。
1059 3
|
9月前
|
存储 Linux 网络安全
【Azure App Service】Root CA on App Service
Azure App Service for Windows应用连接外部SSL服务时,需确保其证书由受信任的根CA颁发。多租户环境下无法修改根证书,但ASE(单租户)可加载自定义CA证书。若遇证书信任问题,可更换为公共CA证书或将应用部署于ASE并导入私有CA证书。通过Kudu的PowerShell(Windows)或SSH(Linux)可查看当前受信任的根证书列表。
203 13
|
10月前
|
API 网络架构 容器
【Azure Container App】查看当前 Container App Environment 中的 CPU 使用情况的API
在扩展 Azure Container Apps 副本时,因 Container App Environment 的 CPU 核心数已达上限(500 cores),导致扩展失败。本文介绍如何使用 `az rest` 命令调用 Azure China Cloud 管理 API,查询当前环境的 CPU 使用情况,并提供具体操作步骤及示例。
351 17
|
10月前
|
网络协议 Java Linux
【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢?
在 Azure App Service(Windows 和 Linux)中部署应用时,分析网络连接状态是排查异常、验证端口监听及确认后端连接的关键。本文介绍如何在 Linux 环境中使用 `netstat` 命令查看特定端口(如 443、3306、6380)的连接情况,并解析输出结果。同时说明在 Windows App Service 中 `netstat` 被禁用的情况下,如何通过门户抓包等替代方法进行网络诊断。内容涵盖命令示例、操作步骤及附录说明,帮助开发者快速掌握云环境中的网络分析技巧。
249 11
|
10月前
|
数据安全/隐私保护
【Azure Function App】PowerShell Function 执行 Get-AzAccessToken 的返回值类型问题:System.String 与 System.Security.SecureString
将PowerShell Function部署到Azure Function App后,Get-AzAccessToken返回值类型在不同环境中有差异。正常为SecureString类型,但部分情况下为System.String类型,导致后续处理出错。解决方法是在profile.ps1中设置环境变量$env:AZUREPS_OUTPUT_PLAINTEXT_AZACCESSTOKEN=false,以禁用明文输出。
246 1
|
12月前
|
Java Shell Maven
【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package
在部署Java应用到Azure Container App时,构建镜像过程中出现错误:“./mvnw.cmd: No such file or directory”。尽管项目根目录包含mvnw和mvnw.cmd文件,但依然报错。问题出现在Dockerfile构建阶段执行`./mvnw dependency:go-offline`命令时,系统提示找不到可执行文件。经过排查,确认是mvnw文件内容异常所致。最终通过重新生成mvnw文件解决该问题,镜像成功构建。
674 1
|
12月前
|
存储 缓存 Serverless
【Azure Container App】如何在Consumption类型的容器应用环境中缓存Docker镜像
在 Azure 容器应用的 Consumption 模式下,容器每次启动均需重新拉取镜像,导致冷启动延迟。本文分析该机制,并提出优化方案:使用 ACR 区域复制加速镜像拉取、优化镜像体积、设置最小副本数减少冷启动频率,或切换至 Dedicated 模式实现镜像缓存,以提升容器启动效率和应用响应速度。
550 0

热门文章

最新文章