【问题标题】:Graph API 403 Forbidden - Either scp or roles claim need to be present in the tokenGraph API 403 Forbidden - 令牌中需要存在 scp 或角色声明
【发布时间】: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


    【解决方案1】:

    graph api 上是否存在导致此问题的错误?

    不是bug,你做的都是对的,只是一个简单的延迟问题,请求token的时候权限没有生效。

    【讨论】:

    • 嗯。那么,最好的办法是处理错误并在此时请求新令牌然后重试吗?一般延迟多长时间?
    • @JamieLowe Yeath,根据我的经验,大约 5 分钟到 10 分钟。
    • 我会接受这个答案 - 当然似乎有延迟。我还向微软提出了一个案例,看看他们是否可以提出任何进一步的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多