【发布时间】:2020-12-28 04:29:06
【问题描述】:
调用 Sharepoint /sites/root 时,我的应用程序失败并显示 403:禁止消息。我的授权流程遵循这些步骤here。
要获得令牌,我首先调用 https://login.microsoftonline.com/common/adminconsent?client_id=XXX&redirect_uri=XXX&state=12345
这使我可以使用管理员登录并发现tenant_id。如果被接受,调用将返回查询参数 admin_consent = TRUE 和tenant_id。
然后我使用它对https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token 进行第二次 POST 调用,请求中包含以下正文: client_id=XXX&grant_type=client_credentials&client_secret=XXX&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
注意:范围设置为默认值 (https://graph.microsoft.com/.default)。我在注册应用程序时请求 Sites.ReadWrite.All 作为应用程序权限,仅此而已。
回复是:
'token_type': 'Bearer',
'expires_in': 3599,
'ext_expires_in': 3599,
'access_token': 'eyJ0...' (deliberately masked)
然后我尝试在我的应用程序中使用 /sites/root 端点并收到错误“令牌中需要存在 scp 或角色声明”。当我使用https://jwt.io/#encoded-jwt 解码令牌时,我看不到“角色”参数可见。
在 Azure 应用程序中,我可以看到该应用程序确实已成功授予管理员访问权限,那么为什么我的令牌没有正确返回?我错过了什么?确定由用户 /adminconsent 作为第一个 API 调用,我也不需要在 Azure 门户中手动授权?
编辑:在大约 50 分钟后进行第二次 API 调用以获取新令牌,因为第一个令牌即将到期似乎有效,我在解码的令牌中恢复了“角色”。图 api 是否存在导致此问题的错误?
"roles": [
"Sites.ReadWrite.All"
],
【问题讨论】:
标签: sharepoint azure-active-directory microsoft-graph-api sharepoint-api