Power App-Power Automate-Azure APIM-后端服务的OAuth 2.0认证流程方案咨询
解决方案:基于OAuth 2.0 On-Behalf-Of流程的无二次登录实现
你的核心需求是在用户已登录Office 365的前提下,让Power Automate以用户身份调用后端服务且无需二次交互。其实OAuth 2.0 On-Behalf-Of(OBO)流程完全支持这种无二次登录场景,你之前的误解在于认为OBO必须搭配交互式的Authorization Code Grant流程,但实际上Power App已持有用户的有效身份令牌,可直接传递给Power Automate触发OBO流程。
具体实现步骤:
配置Microsoft Entra应用注册
- 为后端服务创建应用注册,定义所需权限范围(比如
access_as_user)。 - 为Power Automate创建应用注册(或使用内置服务主体),授予其代表用户调用后端服务的委托权限,确保管理员完成权限同意。
- 确保Power App(或Office 365内置应用)有权限获取用户身份令牌,并可传递给Power Automate。
- 为后端服务创建应用注册,定义所需权限范围(比如
Power App传递用户令牌到Power Automate
- 在Power App中,通过
AzureAD.GetAccessToken()获取用户针对后端服务范围的访问令牌(或直接获取用户ID令牌)。 - 将该令牌作为参数传入Power Automate流。
- 在Power App中,通过
Power Automate执行OBO流程换取后端服务令牌
- 在Power Automate中调用Microsoft Entra令牌端点,请求参数如下:
grant_type:urn:ietf:params:oauth:grant-type:jwt-bearerclient_id: Power Automate应用注册IDclient_secret: Power Automate应用注册密钥(或客户端证书)assertion: Power App传递的用户令牌scope: 后端服务权限范围(比如api://{backend-app-id}/access_as_user)requested_token_use:on_behalf_of
- 从响应中提取
access_token,此令牌包含用户ID声明,可用于调用后端服务。
- 在Power Automate中调用Microsoft Entra令牌端点,请求参数如下:
APIM与后端服务验证令牌
- 在APIM中配置OAuth 2.0验证策略,校验
access_token的签发者、受众、签名等有效性。 - 后端服务从验证后的令牌中提取
oid(用户对象ID)声明,以此获取用户信息和配置文件。
- 在APIM中配置OAuth 2.0验证策略,校验
为什么不推荐服务主体流程?
你提到的“无需用户获取访问权限”的服务主体流程,是以应用身份而非用户身份调用后端服务,无法直接获取当前登录用户的ID声明,不符合你传递用户身份的核心需求,因此OBO流程才是更匹配的方案。
内容的提问来源于stack exchange,提问作者akakarikos
相关产品推荐
相关产品推荐

