【问题标题】:Azure Function v2 with Jwt Authentication without Certificate具有 Jwt 身份验证且无证书的 Azure Function v2
【发布时间】:2019-06-11 06:05:54
【问题描述】:

我正在开发一个测试 Azure Function v2 后端项目。目标是函数方法授权属性使用我从前端项目传递的 jwt 令牌,该前端项目使用 MSAL 在我们在门户 azure 上注册的 v2 应用程序上进行身份验证。我的前端项目是用 Angular 7 编写的,并将这个 npm 包用于 MSAL https://www.npmjs.com/package/@azure/msal-angular。我会为前端和后端项目使用相同的注册应用程序。在启动时我可以做些什么来设置jwt身份验证并将其绑定到功能授权属性?

这是一个概念验证项目,因此我们将使用 Azure 函数替换我们的应用服务 Web API。前端和后端项目使用在门户 azure 上注册的相同应用程序。我们仍将使用相同的注册应用程序,前端将调用 azure 函数而不是应用程序服务。我尝试使用此链接 https://www.ben-morris.com/custom-token-authentication-in-azure-functions-using-bindings 中的绑定示例,但他们使用证书。我想使用 App Id 和 Tenant Id 而不是通过证书。

【问题讨论】:

    标签: c# azure-functions jwt-auth


    【解决方案1】:

    Azure App Service Authentication/Authorization 功能(也称为 EasyAuth)实际上支持不记名令牌来验证 AAD 请求。

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

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

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

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

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

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

    【讨论】:

    • 我想在不使用平台的情况下在代码中实现授权,但我不知道如何将 jwt 身份验证绑定到本机 azure 函数授权标头。在代码身份验证/授权中使用的重点是使用 mvc 项目中可用的自定义策略,但我不知道如何在 Functions 中实现这一点。
    猜你喜欢
    • 2020-04-09
    • 2022-08-03
    • 2019-11-05
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多