从cookie迁移到承载令牌身份验证

时间:2018-12-21 11:20:58

标签: authentication asp.net-web-api jwt

我想将一个过时的项目带到近代,但我不确定如何实现。

我有一个Web应用程序,该应用程序使用cookie身份验证以及在其之上构建的一些东西。它从外部身份验证提供程序X获取令牌,因此X/login这样的端点显示了登录表单,并在查询参数中使用令牌进行了回调。我在查询参数中向令牌发送的X/verify,如果令牌合法,它将返回声明。

登录流程如下:

  1. 新用户导航到授权页面
  2. 中间件重定向到X/login,因为没有cookie出现
  3. 身份验证提供者X成功登录后,会在我的Web应用上使用令牌调用回调端点
  4. Web App验证令牌,获取声明,使用声明创建ClaimsPrincipal
  5. 使用默认Cookie身份验证方案和提及的主体登录(httpContext.SignInAsync(scheme, principal)
  6. 用户已通过身份验证。

我想将其更改为Bearer Token auth,并分别拥有客户端应用程序和API,因此客户端应用程序将重定向到Auth提供程序,获取令牌作为回调,并使用它来验证对API的请求,API会使用身份验证提供者。

虽然获取令牌非常简单,但我不确定如何设置API以使用Bearer令牌并进行验证。起初,我只是想将身份验证方案从cookie更改为auth,这已经足够了,但是我很快了解到httpContext.SignInAsync()不能与Jwt承载者身份验证方案一起使用,现在我有点迷失了。同时,它看起来相当简单(只需两个简单的端点即可获取令牌并对其进行验证),但与此同时,在如何使用现有的asp.net基础结构来处理其他所有事情方面,它也令人困惑。

编辑:我可以将全局中间件添加到API中以检查访问令牌并针对每个请求手动进行验证,但这听起来并不是一个很好的解决方案,因为A)对于API的每个正常请求,每个1个附加请求仅用于验证令牌。 B)没有ClaimsPrincipal可以访问电子邮件等用户数据。现在很好,因为我不想访问该数据,但仍然如此。

0 个答案:

没有答案