如何保护 Angular 和 Spring 应用程序

Posted

技术标签:

【中文标题】如何保护 Angular 和 Spring 应用程序【英文标题】:How to secure Angular & Spring Application 【发布时间】:2018-11-04 16:24:05 【问题描述】:

我们开发了一个应用程序,使用 Angular 5 作为前端,Spring Boot 作为后端。 第一个页面是登录页面,它调用一个 rest api 在后端使用 LDAP 进行身份验证。 我们正在使用带有 JWT 的 OAuth 实现。因此,当用户登录时,凭据用户名和密码是 via。将正文中的 POST 请求发送到其余 api 以进行身份​​验证。 在标头中,我们为 Oauth 发送 clientId 和 secret。 问题是凭据在请求中暴露,可以在浏览器开发人员选项中看到。 我需要一种方法来屏蔽/加密这些凭据。

【问题讨论】:

你实现了吗?请给我一个想法。 【参考方案1】:

您可以使用 cypto-js 库从您的 Angular 应用程序中加密您的密码。

安装:

npm install crypto-js

用法:

var AES = require("crypto-js/aes");
var SHA256 = require("crypto-js/sha256");
var MD5 = require("crypto-js/md5");
console.log(AES("YOUR PASSWORD"));//AES ENCRYPTION
console.log(SHA256("YOUR PASSWORD"));//SHA256 ENCRYPTION
console.log(MD5("YOUR PASSWORD"));//MD5 ENCRYPTION

谢谢,希望对你有帮助!

【讨论】:

请不要使用MD5加密,不安全。 感谢 Vipul。如果我在角端使用加密库进行加密,我需要在后端 spring 应用程序中解密它以使用 ldap 对其进行身份验证。有没有办法可以在后端 spring 解密它? 通常我们不会在前端加密密码并让它在网络控制台中可见,但我相信这可能有助于java端***.com/questions/10303767/…【参考方案2】:

嗯,网络选项卡中的请求中暴露的密码是很“正常的”——毕竟你的 API 需要读取密码并检查它是否有效。

您仍然可以做几件事:

您绝对应该通过 https 进行通信,并且还可以使用多个额外的安全标头 您可以在浏览器端对密码进行哈希处理,并将哈希处理为用户密码 在客户端更改哈希函数几乎是不可能的,因为它要求所有用户重新更新他们的密码 您无法进行任何 API 端密码强度验证 可以在浏览器端对密码进行加密,在API中解密。 您仍然应该在 API 中对密码进行哈希处理,并且存储来自客户端的加密密码(因为加密在源代码中对用户可见)

我实际上不喜欢 Hash 变体,因为您失去了对密码强度的控制,理论上有人可以使用 API 并使用密码“Test”或类似的东西创建用户。

第二种方法确实对您有所帮助,因此它在“网络”选项卡中不可见。但请注意,如果有人真的在乎,他可以在你的源代码中查找加密,如果他有权访问它,仍然可以在请求中解密它

【讨论】:

谢谢尼古拉斯。 1.我们如何在angular和spring使用相同的证书来配置https? 2.如果我在前端加密密码,我需要在后端spring解密它,我没有在网上找到任何文章。 @Roger 看起来您缺少一些基础知识。我建议使用 https 在 Spring Webserver 上做一个教程。客户端提供证书。您可以创建一个自签名的,从lets-encrypt 获得一个免费的或购买一个。至于你的第二点,这与角度/弹簧无关。只需找到两种语言都支持的加密,例如 base64。

以上是关于如何保护 Angular 和 Spring 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Angular 6 - Spring Boot 微服务应用程序 [关闭]

Grails、Spring Security 和 Angular JS - 如何保护 URL?

如何使用 Spring Boot 保护单页应用程序

如何保护 Angular.js 或 Ember.js 的 Spring RESTful Web 服务

使用 Spring Security 保护 Angular JS 应用程序

如何将 Angular 2 应用程序与 spring-oauth2 服务器连接?