使用 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 函数身份验证的主要内容,如果未能解决你的问题,请参考以下文章
使用 JWT 令牌的 ASP.NET Core 网站到 WebApi 身份验证
Asp.Net Core Identity 使用 JWT 中的哪些信息来将令牌授权为有效?