如何生成Power BI访问令牌?调用API提示未授权求助
正确生成Power BI访问令牌的步骤及排障
1. 先确认API权限真的生效了
- 得确保你加的是Power BI Service的权限,别选错API。针对
GET /datasets接口,需要的是Dataset.Read.All权限,还要分清两种权限类型:- 如果是用户登录后调用(比如前端带用户身份操作),用委派权限,要么让用户自己授权,要么租户管理员做租户级同意;
- 如果是后台服务调用(无用户交互),用应用权限,必须让租户管理员在应用注册的「API权限」页面点「授予管理员同意」,不然权限等于没开。
- 去应用注册的「API权限」页面看一眼,权限旁边得显示「已授予」(应用权限),或者用户已经完成授权(委派权限),没这个状态的话权限根本不生效。
2. 选对OAuth授权流程
根据你的使用场景挑对应的流程:
场景1:有用户交互(用委派权限)
用授权码流程,先拿授权码,再换令牌。请求授权码的参数要带:
client_id: 你的应用注册IDresponse_type:coderedirect_uri: 你在应用注册里配的重定向URIscope: 比如https://analysis.windows.net/powerbi/api/Dataset.Read.All,或者用https://analysis.windows.net/powerbi/api/.default(静态范围)resource:https://analysis.windows.net/powerbi/api(受众必须完全一致)
拿到授权码后,POST到https://login.microsoftonline.com/{你的租户ID}/oauth2/token换令牌,参数填这些:
grant_type=authorization_code client_id={你的应用ID} client_secret={你的应用密钥(Web应用才需要)} code={刚拿到的授权码} redirect_uri={配好的重定向URI} resource=https://analysis.windows.net/powerbi/api
场景2:后台服务调用(用应用权限)
用客户端凭证流程,直接POST到https://login.microsoftonline.com/{你的租户ID}/oauth2/token,参数如下:
grant_type=client_credentials client_id={你的应用ID} client_secret={你的应用密钥} resource=https://analysis.windows.net/powerbi/api scope=https://analysis.windows.net/powerbi/api/.default
3. 生成令牌后先验一验
用本地的JWT解码工具(别用在线的,怕泄露信息)检查这几个关键字段:
aud: 必须是https://analysis.windows.net/powerbi/api,和你设置的受众完全一致;roles(应用权限)或scp(委派权限):得包含Dataset.Read.All这个权限;tid: 租户ID得和你的Power BI所在租户一致。
4. 调用API时的细节别错
- 请求头的
Authorization格式必须是Bearer {你的令牌},注意Bearer后面有个空格; - API地址确认是
GET https://api.powerbi.com/v1.0/myorg/datasets,应用权限下这个路径是可用的,不用额外改。
常见未授权的坑
- 权限没做管理员同意:应用权限必须让租户管理员点「授予管理员同意」,不然哪怕你加了权限也没用;
- 令牌请求时
resource字段填错:哪怕你以为受众对了,实际请求时参数写错的话,令牌受众就不对; - 权限类型配错:比如后台服务用了委派权限,或者用户场景用了应用权限,都会导致授权失败;
- 令牌过期:看
exp字段,过期了就重新生成一个。
内容的提问来源于stack exchange,提问作者郑驰骋
相关产品推荐
相关产品推荐

