1

API 复制

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

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

  • 我还添加到 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。我在那里完成了我所有的工作。弹出窗口,提供我的登录名和密码。

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

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

问题

我的 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)}",
4

1 回答 1

2

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

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

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

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

于 2020-04-08T21:36:15.190 回答