angular - 在后端(.Net)和前端(角度)之间共享 JWT 令牌
问题描述
我有一个特定的项目,我在其中使用带有 Angular 7 前端构建的 .Net ASP MVC 应用程序。“特定”是指 Angular 禁用了路由 - 路由由 MVC 后端应用程序处理。它返回 cshtml 视图(将一些数据传递给脚本标签)并以角度呈现其视图。
现在的情况是我想包含 JWT 令牌的授权并且架构有问题。
MVC 处理路由,因此它应该“知道”令牌,即自动处理请求等。
Angular 可以使用访问令牌通过 API 处理业务逻辑
如果 Angular 收集令牌(传递用户名/密码)后端无法生成自己的 access_token,因为它不知道凭据。它可能导致数据在前/后端之间的不同步
只有一个应用程序应该处理刷新令牌
那么哪个应用程序应该处理从 AuthServer 收集 access_token 的过程?刷新令牌应该由什么负责?在哪里存储令牌?
谁能告诉我起点?
解决方案
一般来说,使用客户端 Angular 应用程序来获取一个access_token
是一个危险的解决方案。当通过 Javascript 创建访问令牌时,它会受到包括 XSS 和 XSRF 在内的许多攻击。
当前的最佳实践方法是将用户的凭据安全地发送到您的服务器端应用程序,并允许它处理身份验证和授权流程。或者,委托给为此场景设计的第三方产品。当您的用户第一次尝试访问受保护的客户端视图时,它应该执行服务器端的安全数据请求。应在服务器端应用程序上为用户创建一个会话,在此期间应提示他们进行身份验证。身份验证完成后,您的服务器应用程序可以选择通过 httpOnly 和 Secure cookie 与客户端应用程序共享(和存储)JWT。
使用 httpOnly 和 Secure cookie 可确保令牌不会与用户浏览器以外的任何人共享。
推荐阅读
- javascript - 显示在 jQuery UI Datepicker 中突出显示的最小和最大日期
- jquery - scrollTop 在 iframe 中时不起作用
- c# - 如何以编程方式将任务添加到特定的 Outlook 存储
- julia - Julia:抽象类型的覆盖函数没有被调用
- django - 如何仅使用社交媒体身份验证但也仅通过管理员用户邀请对新用户进行身份验证?
- java - 单击项目后如何关闭回收站视图持有者?
- arduino - 无法获得柔性传感器的恒定值
- netlogo - 在 Netogo 上创建游戏 Snake
- python - 为什么我的 Miller-Rabin 算法实现无法检测到某些素数?
- android - 获取文件的访问时间