获取带行级安全的Power BI报表嵌入令牌遇权限问题求助
Power BI嵌入令牌自定义用户名报错403解决方法
问题场景
调用Power BI API的GenerateToken端点(https://api.powerbi.com/v1.0/myorg/groups/*workspace_id*/reports/*report_id*/GenerateToken)生成带行级安全(RLS)的嵌入令牌时,请求体中自定义username字段会返回403错误,提示:
Creating embed token for accessing dataset dataset_id requires effective identity username to be identical to the caller's principal name
仅当username填写服务主体GUID时才能成功获取200响应的嵌入令牌。
解决步骤
1. 开启租户级服务主体嵌入权限
进入Power BI管理门户,按以下路径配置:
- 导航到租户设置 > 嵌入内容和应用
- 找到允许服务主体使用Power BI API代表用户生成嵌入令牌选项,设置为允许,并将你的服务主体加入允许列表(或选择允许整个组织)
2. 配置服务主体权限
- 确保服务主体是目标工作区的成员或管理员
- 确认服务主体对目标数据集拥有读取权限(可通过工作区权限分配,或直接在数据集权限中添加服务主体)
3. 检查数据集RLS配置
- 确保数据集的RLS角色规则能匹配自定义的
username(例如角色使用USERNAME()函数过滤数据行) - 若无需指定角色,也要确保RLS角色已正确发布,且服务主体有权限应用该角色
4. 调整请求体(按需)
如果需要绑定特定RLS角色,在roles数组中添加角色名称,示例请求体:
{ "accessLevel": "View", "identities": [ { "username": "自定义用户名", "roles": ["你的RLS角色名称"], "datasets": ["dataset_id"] } ] }
注意事项
- 自定义的
username不需要对应实际存在的Power BI用户,只要RLS规则能识别即可 - 确保应用通过服务主体正确获取初始访问令牌,且令牌包含
Dataset.Read.All、Report.Read.All等必要权限
内容的提问来源于stack exchange,提问作者Jason Richmeier
相关产品推荐
相关产品推荐

