0

I am working on a test Azure Function v2 back end project. The goal is that the function method authorization attributes use the jwt token that I pass from our front end project that use MSAL to authenticate on our v2 app registered on portal azure. My front end project is written in Angular 7 and use this npm package for MSAL https://www.npmjs.com/package/@azure/msal-angular. I would use the same registered app for front end and back end project. What can I do in the startup to set jwt authentication and bind it to the function authorization attributes ?

This is a proof of concept project so we would replace our App Service Web API with an Azure Function. The front end and back end project use the same app registered on portal azure. We would still use the same registered app and front end would call the azure function instead of the App Service. I tried to use a binding example from this link https://www.ben-morris.com/custom-token-authentication-in-azure-functions-using-bindings , but they use a Certificate. I would like to use the App Id and Tenant Id instead of passing a Certificate.

4

1 回答 1

0

Azure 应用服务身份验证/授权功能(也称为 EasyAuth)实际上支持承载令牌以对 AAD 请求进行身份验证。

要为您的函数应用启用该功能,请在门户中导航到您的应用。然后转到平台功能 > 网络 > 身份验证/授权。从那里,选择 AAD 的高级配置,并为您的 AAD 应用程序注册提供客户端 ID 和颁发者 URL。现在,您的应用程序将能够验证具有承载令牌的请求,并且您的 AAD 应用程序注册为受众。

对于授权组件,您有两种选择。

  1. 设置Action to take when request is not authenticatedLog in with Azure Active Directory。这是一个全局设置,因此对函数应用程序的所有 HTTP 请求都受此授权逻辑的保护。

  2. 设置Action to take when request is not authenticatedAllow Anonymous requests (no action)。在这种情况下,平台不会执行任何授权逻辑,您必须在代码中实现它。虽然这是更多的工作,但它允许您更灵活地决定应该保护哪些 API,并且还允许更复杂的授权逻辑,而不仅仅是“请求是否经过身份验证?”。

    如果您的 HTTP 触发器使用 C#,您可以轻松访问填充了 AAD 标识的ClaimsPrincipal对象。从那里,您可以轻松地执行您的授权逻辑。JavaScript 支持应该很快就会出现在这个特性上。如果您无权访问此 ClaimsPrincipal,您还可以手动解析不记名令牌并查看那里存在的声明。

注意:忽略文档顶部关于不支持 MSAL 和 AAD V2 端点的声明。自 2019 年 4 月起不再是这种情况。AAD v1 端点的配置几乎相同,但发行者 url 已/v2.0附加到末尾。

于 2019-06-10T22:05:54.367 回答