我目前正在使用 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.tsthis.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 可能不应该用于客户端内容验证吗?
1 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
考虑到 JWT 最佳实践,您的所有验证都应该在后端完成,因为您的 Web 应用程序中编码的任何验证都可以被您的任何客户端读取,从而导致巨大的安全漏洞:任何人都知道如何创建有效的 JWT为您的应用程序。
即使没有任何数据,也能看到与管理员相关的 UI 是否是个大问题?考虑到所有可以返回敏感数据的路由都受到 JWT 授权的保护,如果用户访问需要数据的任何页面或 UI 部分,他们会触发检索它的请求,这可能会返回 401(未授权) HTTP 状态,或类似的。在这些情况下,常见的前端实践是擦除客户端用户数据,并重定向到登录页面。
因此,典型的流程是:
用户将伪造的访问令牌插入到他们的存储中
用户打开一个以任何方式使用敏感数据的管理页面/用户界面(显示、用于任何内部逻辑等)
Web 应用程序向 API 请求数据
API 返回一个将被解释为授权错误的响应
Web 应用程序接收 API 响应,清除用户访问令牌并将其重定向到其登录页面
在大多数情况下,整个流程将发生得足够快,足以阻止您的用户进一步交互和探索您的 Web 应用程序。
如果您提供有关您的场景的更多信息会更好,这样任何人都可以理解您的担忧是否需要考虑并真正解决。但是,在大多数情况下,上述行为是可以接受的。
- 1 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消