使用 ASP.NET 标识和 JWT 令牌的 Azure 函数身份验证

Posted

技术标签:

【中文标题】使用 ASP.NET 标识和 JWT 令牌的 Azure 函数身份验证【英文标题】:Azure functions authentication with ASP.NET Identity and JWT token 【发布时间】:2018-07-20 21:26:30 【问题描述】:

我正在开发一个新的开发堆栈,我计划使用Azure functions 实现无服务器。

我认为我的应用程序应该使用ASP.NET Identity 来存储用户凭据和其他详细信息。他应该使用JWT tokens 在身份数据库中进行身份验证。

我正在尝试获取一些示例,这些示例可能有助于了解如何在 Azure 函数中实现 ASP.NET 标识。谁能指出我正确的方向?

【问题讨论】:

为什么不使用 Azure AD? @Coding Client 坚持使用 SQL server db 和 asp.net 身份,因为我们想利用 asp.net 身份功能。关于如何实现这一点的任何提示? 【参考方案1】:

我最近不得不做这样的事情,即针对第三方 OAuth 服务器发布的 JWT 访问令牌进行身份验证。没有方便的中间件可以让您执行此操作,因此您只能手动实现。

我使用的方法是创建一个custom input binding,让您可以验证令牌并将ClaimsPrincipal 注入到函数定义中。生成的函数定义如下所示:

[FunctionName("ExampleHttpFunction")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "example")] HttpRequest req, 
    ILogger log, 
    [AccessToken] ClaimsPrincipal principal)

    log.LogInformation($"Request received for principal.Identity.Name.");
    return new OkResult();


这至少将身份验证与函数定义分开,并使事情变得更可测试。

您需要将六个不同的类连接在一起才能使其工作,但我已经在此处写了详细信息:custom token authentication for Azure Functions。 GitHub 上也有一些示例代码,你可以看看。

希望这会有所帮助...!

【讨论】:

【参考方案2】:

我认为没有有效的方法来做到这一点。因为 azure 函数在整个应用程序中并没有真正的启动点或入口点,您可以在其中插入 oauth ,这通常在 mvc 或 web 应用程序的 startup.cs 或 global.asax 中完成。

所以这不得不稍微偏离它在 Web 应用程序中的完成方式

也许这会有所帮助

https://vincentlauzon.com/2017/12/04/azure-functions-http-authorization-levels/

【讨论】:

谢谢。我知道天蓝色函数的内置级别,正如你提到的,我找不到插入 oAuth 的地方,这就是为什么我问一个问题来确认它是否可能。我想我将不得不手动开发模块。

以上是关于使用 ASP.NET 标识和 JWT 令牌的 Azure 函数身份验证的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 核心中的 jwt 令牌无效

ASP.NET Core 和 JWT 令牌生命周期

使用 JWT 令牌的 ASP.NET Core 网站到 WebApi 身份验证

Asp.Net Core Identity 使用 JWT 中的哪些信息来将令牌授权为有效?

通过 Auth0 React 和 ASP.net 核心授权然后使用 JWT 令牌

使用外部 JWT 令牌 ASP.NET CORE