繁体   English   中英

ASP.NET Core SPA中基于JWT的身份验证-前端验证

[英]JWT-based authentication in ASP.NET Core SPA - front-end validation

我目前正在使用ASP.NET Core 2.1中的KnockoutJS SPA模板,并且设法实现了与Angular中制作的授权流程完全相同的授权流程:

https://fullstackmark.com/post/13/jwt-authentication-with-aspnet-core-2-web-api-angular-5-net-core-identity-and-facebook-login

正如您在其用户前端服务中所看到的,基本上,对于用户是否在客户端登录的唯一检查是检查“ auth_token”键是否存在于客户端的本地存储中:

https://github.com/mmacneil/AngularASPNETCore2WebApiAuth/blob/master/src/src/app/shared/services/user.service.ts

this.loggedIn = !!localStorage.getItem('auth_token');
// ?? not sure if this the best way to broadcast the status but seems to resolve issue on page refresh where auth status is lost in
// header component resulting in authed user nav links disappearing despite the fact user is still logged in

简而言之,任何人都可以打开浏览器的本地存储,并使用“ auth_token”键插入随机字符串,他们将能够在UI中看到所有与管理员相关的内容(即使它们会因API请求而失败)。

有人可以为此建议更好的流程吗? 还是每当“打开”管理页面时向API发送“登录请求”的唯一选择?

PS我在身份验证方案方面相对较新,是否应该不使用JWT进行客户端内容验证?

考虑到JWT的最佳实践,您的所有验证都应在后端进行,因为您的任何客户端都可以读取Web应用中编码的任何验证,从而导致巨大的安全漏洞:任何人都知道如何创建有效的JWT为您的应用程序。

即使没有任何数据也可以查看与管理员相关的用户界面,这是一个大问题吗? 考虑到所有可以返回敏感数据的路由均受到JWT授权的保护,如果用户访问用户界面中需要数据的任何页面或部分,他们将触发请求以检索数据,这很可能会返回401(未经授权) HTTP状态或类似状态。 在这些情况下,常见的前端实践是擦除客户端用户数据,然后重定向到登录页面。

因此,典型的流程为:

  • 用户将伪造的访问令牌插入其存储中
  • 用户打开一个管理页面/用户界面,该页面以任何方式使用敏感数据(显示,用于任何内部逻辑等)
  • Web应用程序对API发出请求,请求数据
  • API返回的响应将被解释为授权错误
  • Web应用程序收到API响应,删除用户访问令牌并将其重定向到其登录页面

在大多数情况下,整个流程将以足够快的速度发生,以阻止您的用户进一步进行交互并浏览您的Web应用程序。

如果您提供有关您的方案的更多信息会更好,这样任何人都可以理解,如果您的担忧是需要考虑并真正解决的。 但是,在大多数情况下,可以接受上述行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM