【问题标题】:Easy Auth Implicit Flow with AAD and Azure Function returns Unauthorized使用 AAD 和 Azure 函数的 Easy Auth Implicit Flow 返回未经授权
【发布时间】:2020-07-20 05:56:36
【问题描述】:

API 重现

  • 我在 azure 门户中创建了一个简单的 azure 函数应用,并通过 http 绑定运行。函数只返回字符串“来自安全 API 的 Hello”。

  • 接下来在平台功能中我选择了身份验证/授权。我打开了应用服务身份验证。我选择了请求未通过身份验证时要执行的操作:使用 AAD 登录。选择 AAD 作为我的提供程序并配置为 Express 模式(默认目录)并选择 {name} 作为新的 Active Directory 应用程序。

  • 我还添加到 CORS 策略地址:http://localhost:8080,我的 Vue.js 客户端应用程序正在运行。

  • 在这些操作之后,我在我的 AAD 中注册了应用程序,并且已经定义了 user_impersonation 范围。 AD App 已经配置了重定向 URI:https://{name}.azurewebsites.net/.auth/login/aad/callback,在 Web 平台上检查了 Id 令牌的隐式授权。我想将受支持的帐户类型更改为多租户,但由于某些错误我不能。

  • 在 Expose Api 部分,我将 App Id Uri 从 https://{name}.azurewebsites.net 更改为 api://{app id} 以选择多租户支持的客户端类型。已经定义了 user_impersonation 范围。

客户代理

  • 我在 Web 平台上使用重定向 uri http://localhost:8080/ 注册了我的应用程序,并在隐式授予部分中选择了 id 和访问令牌。我选择了多租户帐户类型。

  • 我将 api 权限添加到我的 API(天蓝色函数)api://{api app id }/user_impersonation

  • 我在我的 vue.app 中使用 MSAL.JS。我在那里完成了我所有的工作。弹出窗口,提供我的登录名和密码。

  • 我在 vue.js 客户端应用程序中从身份提供程序 (AAD) 收到了 id 令牌和访问令牌。

  • 我正在使用授权标头 Bearer {access_token} 向我的 API(azure 函数)发送请求。

问题

我的 API 请求未经授权。我得到了状态 401:

POST https://{azure func name}.azurewebsites.net/api/HttpTrigger1?code={code}== 401 (Unauthorized)

Http 地址是从 azure 门户复制的。

当我单击链接时,我被重定向到登录,然后在浏览器选项卡中使用我的“Hello from secure API”文本重定向到 azure 函数。

我似乎 Easy auth 将我的 azure 函数视为客户端应用程序,无论我是否希望它成为我的 vue.js 应用程序的中间件 APi。我的 Azure 函数 API 应该只接收和验证访问令牌。

试过

我也尝试使用令牌从邮递员发送请求,但也收到了未经授权的请求。

我探索了令牌,它似乎是正确的:

"aud": "api://{Azure function App Id (id in AAD)}",
"iss": "https://sts.windows.net/{tenant id}/",
"appid": "{registered vue js client app id (id in AAD)}",

【问题讨论】:

    标签: azure azure-active-directory azure-functions msal implicit-flow


    【解决方案1】:

    要解决此问题,我必须转到 Azure Function App 平台功能中的身份验证/授权部分。在身份验证提供程序下选择 AAD -> 高级并添加允许的令牌受众:api://{Azure Function AD App Id}。

    问题是我的令牌是为其他观众准备的:https://{func name}.azurewebsites.net。这是由于更改了我的 AF AD 应用程序 ID:

    “在 Expose Api 部分,我将 App Id Uri 从 https://{name}.azurewebsites.net 到 api://{app id} 以便选择 多租户支持的客户端类型。已经有 定义了 user_impersonation 范围。”

    此操作也更改了范围名称。

    【讨论】:

    • 非常感谢您发布您的答案。当我找到你的答案时,我正在准备一个类似的问题。 “允许的令牌观众”是我不知道的一个配置。你为我节省了几个小时;)
    • 很高兴知道我能帮到你?。我浪费了几个小时
    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2018-11-05
    相关资源
    最近更新 更多