azure - 使用 AAD 和 Azure Function 的 Easy Auth 隐式流程返回未经授权

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

API 重现

  • 我在 azure 门户中创建了一个简单的 azure 函数应用程序,并使用 http 绑定(bind)函数。函数仅返回字符串“Hello from secure API”。

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

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

  • 完成这些操作后,我已在 AAD 中注册了应用程序,并且已经定义了 user_impersonation 范围。 AD 应用程序已经配置了重定向 URI:https://{name}.azurewebsites.net/.auth/login/aad/callback,检查了 Web 平台上隐式授予的 Id token 。我想将支持的帐户类型更改为 Multi-Tenancy ,但由于出现错误而无法更改。

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

客户重现

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

  • 我向我的 API 添加了 api 权限(azure 函数)api://{api app id }/user_impersonation

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

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

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

问题

我的 API 请求未经授权。我的状态为 401:

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

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

当我单击链接时,我会被重定向到登录,然后重定向到 azure 函数,并在 brwoser 选项卡中显示“Hello from secure API”文本。

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

尝试过

我还尝试使用 token 发送来自 postman 的请求,但也收到了未经授权的请求。

我探索了该 token ,它似乎是正确的:

"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 Function App 平台功能中的身份验证/授权部分。在“身份验证提供程序”下,选择 AAD -> 高级并添加允许的 token 受众:api://{Azure Function AD App Id }。

问题是我的 token 是供其他受众使用的:https://{func name}.azurewebsites.net。这是由于更改了我的 AF AD 应用程序 ID:

"In Expose Api section I changed App Id Uri from https://{name}.azurewebsites.net to api://{app id} in order to choose multitenant supported client types. There already has been user_impersonation scope defined."

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

关于azure - 使用 AAD 和 Azure Function 的 Easy Auth 隐式流程返回未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61090233/

相关文章:

azure - CosmosDB Azure 函数绑定(bind)

azure - 监视特定对象的事件

c# - MS Graph - 401 未经授权,看似具有适当的 token 和访问权限

azure - 是否可以使用 onPremisesSyncEnabled (Microsoft Graph API) 来监视 Azure AD 是否同步?

azure - 是否可以在不使用实际事件中心的情况下在本地执行事件中心触发的 Azure Functions?

azure - Azure Blob 存储 block 文件的 GetBlob 计数

azure - 如何使用 Powershell 激活特权访问组?

c# - .Net 核心身份和 Azure AD 身份验证

azure - Function App PowerShell - 使用模块发布函数

Azure函数应用程序间歇性返回502 Bad Gateway