具有Jwt身份验证且没有证书的Azure Function v2

时间:2019-06-10 13:40:52

标签: c# azure-functions jwt-auth

我正在测试一个Azure Azure v2后端测试项目。目标是函数方法授权属性使用我从前端项目传递的jwt令牌,该令牌使用MSAL在门户网站Azure上注册的v2应用程序上进行身份验证。我的前端项目是用Angular 7编写的,并且将此npm软件包用于MSAL https://www.npmjs.com/package/@azure/msal-angular。我会将相同的注册应用程序用于前端和后端项目。在启动过程中如何设置jwt身份验证并将其绑定到功能授权属性?

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

1 个答案:

答案 0 :(得分:0)

Azure App Service Authentication/Authorization功能(也称为EasyAuth)实际上支持Bearer令牌,用于验证对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月,情况已不再如此。AADv1端点的配置几乎相同,但颁发者URL的末尾附加了/v2.0