首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用easyauth从azure-appservice获取作用域的访问令牌

使用easyauth从azure-appservice获取作用域的访问令牌
EN

Stack Overflow用户
提问于 2021-03-28 04:20:31
回答 1查看 412关注 0票数 0

我正在用python/Flask创建一个非常小的webapp,在Azure App Service下运行。该应用程序受Azure AD身份验证保护,该身份验证依赖于easyauth。应用程序注册有两个已配置的权限/范围:https://graph.microsoft.com/User.Read (获取有关当前用户的信息)和https://management.azure.com/user_impersonation (在Azure管理基础设施上运行查询)。

每当我访问这个应用程序时,我都必须登录。这很好。我被提供了许多头文件,包括X-Ms-Token-Aad-Access-Token,它似乎包含一个访问令牌。

当我访问Microsoft Graph时(因此使用https://management.azure.com/user_impersonation作用域),一切都很好(为了空间和清晰度,我去掉了一些错误处理):

代码语言:javascript
复制
@app.route("/userinfo")
def userinfo():
    token = request.headers.get("X-Ms-Token-Aad-Access-Token")

    data = requests.get(
        "https://graph.microsoft.com/oidc/userinfo",
        headers={ 'Authorization': f"Bearer {token}" },
    ).json()

当我运行几乎相同的代码来获取web应用程序的列表时,它会失败,并显示一个简单的"AuthenticationFailed“代码(也没有错误处理):

代码语言:javascript
复制
@app.route("/webapp")
def webapp():
    token = request.headers.get("X-Ms-Token-Aad-Access-Token")
    data = requests.get(
        f"https://management.azure.com/subscriptions/{subscription_id}/providers/Microsoft.Web/sites?api-version=2019-08-01",
        headers={ 'Authorization': f"Bearer {token}" },
    ).json()

我怀疑app service / easyauth提供的令牌不支持https://management.azure.com/user_impersonation作用域,即使在web应用程序设置中指定了它。但我真的不知道。然而,它不起作用。我知道这个。

显而易见的问题是:这是可能的吗?我是不是漏掉了什么明显的东西?有没有简单的解决方案?

(使用MSAL而不是声明机制似乎是可行的,但我希望尽可能多地使用平台服务)

EN

回答 1

Stack Overflow用户

发布于 2021-04-01 14:50:41

可以,停那儿吧。

要调用Azure REST API,你需要在你的web应用的authsettings中利用additionalLoginParams,导航到resource explorer -> find your web app -> add ["resource=https://management.azure.com"] To additionalLoginParams like below -> PUT

配置完成后,当用户登录应用程序时,它会让你同意权限https://management.azure.com/user_impersonation,同意后,X-Ms-Token-Aad-Access-Token将能够调用Azure REST API,即https://management.azure.com,但它将无法再调用Microsoft Graph,因为一个访问令牌只能用于一个API资源,要获取用户信息,您可以直接点击https://webappname.azurewebsites.net/.auth/me,它将包含用户信息。此外,请确保您的用户帐户在您的订阅中具有RBAC角色,例如ContributorOwner,因为令牌的权限来自用户。

有关更多详细信息,请参阅此similar issue

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66835707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档