【问题标题】:Getting access denied when accessing Azure Web App via token通过令牌访问 Azure Web App 时访问被拒绝
【发布时间】:2019-08-01 17:53:24
【问题描述】:

我们正在测试通过使用 Azure Active Directory 的内置 Azure Web 应用身份验证/授权来锁定托管在 Azure Web 应用上的 API。

我们在 Postman 中使用以下参数调用 POST https://login.microsoftonline.com/{tenantIDhere}/oauth2/v2.0/token

grant_type: password
client_id: {ID}
username: {username}@{tenenat}.onmicrosoft.com
password: {password}
scope: https://{webappname}.azurewebsites.net/.default
client_secret: {secret}

以下是我得到的回复:

"token_type":"Bearer","scope":"https://{webappname}.azurewebsites.net/user_impersonation https://{webappname}.azurewebsites.net/.default","expires_in":3599,"ext_expires_in":3599,"access_token":"{TOKEN HERE}"}

所以我使用该令牌并尝试通过在标头中传递令牌来访问网页,然后使用 POST 得到以下错误:

https://{webappname}.azurewebsites.net/api/url

Authorization: Bearer {TOKEN HERE}

响应(401 未授权)

You do not have permission to view this directory or page.

我花了几天时间尝试所有我能找到的东西。我错过了什么??一旦我关闭网络应用程序所需的授权,我就会得到预期的结果。但是使用grant_type:密码,我无法进入!我觉得它与范围有关,但我在这里找不到关于我需要什么的文档。有什么想法吗?

用户可以手动登录网页并拉取数据,因此不是权限问题。这与我相信的令牌有关。

【问题讨论】:

    标签: azure oauth-2.0 azure-active-directory postman azure-web-app-service


    【解决方案1】:

    如果您使用的是 v2.0 端点,则范围应为 {your_client_id}/.default。将 https://{webappname}.azurewebsites.net 替换为 Azure AD 中 API 应用的客户端 ID/应用程序 ID。

    编辑

    正如韦恩所说,您也可以将scope 设置为{your_client_id}/User.Read 以获取访问令牌。

    【讨论】:

    • 实际上,当您使用ROPC流时,权限应该是委派的权限。所以,我们仍然应该使用特定的范围来授权权限,而不是<AppIdentifier>/.default。如果获得应用权限,可以使用<AppIdentifier>/.default作为作用域。
    • 成功了,谢谢!我还意识到我是在 Body 选项卡而不是 Header 选项卡中发送不记名令牌。在更改之后,我得到了预期的结果!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多