在后端(.Net)和前端(角度)之间共享 JWT 令牌

Posted

技术标签:

【中文标题】在后端(.Net)和前端(角度)之间共享 JWT 令牌【英文标题】:Sharing JWT token between backend (.Net) and frontent (angular) 【发布时间】:2020-03-13 21:19:26 【问题描述】:

我有一个特定的项目,我使用 .Net ASP MVC 应用程序和 Angular 7 的前端构建。 “特定”是指 Angular 禁用了路由 - 路由由 MVC 后端应用程序处理。它返回 cshtml 视图(将一些数据传递给脚本标签)并以角度呈现其视图。

现在的情况是我想使用 JWT 令牌进行授权,但架构存在问题。

    MVC 处理路由,因此它应该“知道”令牌,即自动处理请求等。

    Angular 可以使用访问令牌通过 API 处理业务逻辑

    如果 Angular 收集令牌(传递用户名/密码)后端无法生成自己的 access_token,因为它不知道凭据。并且可能导致前/后端数据不同步

    只有一个应用程序应该处理刷新令牌

那么哪个应用程序应该处理从 AuthServer 收集 access_token 的过程? 刷新令牌应该由什么负责? 在哪里存储令牌?

谁能告诉我起点?

【问题讨论】:

身份验证是由 SSO 还是由您的后端处理? 如果我理解正确 - 令牌由我自己创建的单独 AuthAPI 生成(基于整个 oauth 和身份中间件)。 【参考方案1】:

一般来说,使用客户端 Angular 应用程序获取access_token 是一种危险的解决方案。当通过 javascript 创建访问令牌时,它会受到包括 XSS 和 XSRF 在内的多种攻击。

当前的最佳实践方法是将用户的凭据安全地发送到您的服务器端应用程序,并允许它处理身份验证和授权流程。或者,委托给为此场景设计的第三方产品。当您的用户第一次尝试访问受保护的客户端视图时,它应该执行服务器端的安全数据请求。应在服务器端应用程序上为用户创建一个会话,在此期间应提示他们进行身份验证。身份验证完成后,您的服务器应用程序可以选择通过 httpOnly 和 Secure cookie 与客户端应用程序共享(和存储)JWT。

使用 httpOnly 和 Secure cookie 可确保令牌不会与用户浏览器以外的任何人共享。

【讨论】:

以上是关于在后端(.Net)和前端(角度)之间共享 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章

JSON 仅在后端和前端之间

如何使用 vuex 和 vue-router 在后端和前端之间同步状态?

在后端、react 和 react-native 客户端之间共享 typescript 代码

无法将角度前端与 javaBackend 连接起来?

如何使用 JWT 从前端(角度 4)将密钥传递到后端(节点 js)

JS fetch 无法设置标题