我正在开发使用春季启动1.5.7作为后端和网站角2为前端。 我是这两种技术的新手,这是我第一次尝试开发一个网站。所以我对很多事情感到困惑。Securirty:Java的春季启动+角2 +智威汤逊
我已通过JWT实施了用户验证。 当通过证书用户登录,后台对其进行验证,然后创建一个JWT,并返回给前端:令牌被添加到标题是这样的:
Authorization - Bearer <jwt token>
在前端我如果该项检查在帖子回复中。如果它在那里,我将它和用户名一起添加到localStorage。
private authUrl = 'http://localhost:8080/login';
private headers = new Headers({
'Content-Type': 'application/json',
'Accept': 'application/json'
});
constructor(private http: Http) { }
login(username: string, password: string): Observable<void> {
let loginRequest = JSON.stringify({ username: username, password: password });
return this.http.post(this.authUrl, loginRequest, { headers: this.headers })
.map((response: Response) => {
let token = response.headers.get('Authorization');
// If token is not null, empty or undefined.
if (token) {
localStorage.setItem('jwt', JSON.stringify({ username: username, token: token }));
}
});
}
当用户登录时,他每次访问受保护的资源,令牌将从localStorage的检索和发送回后端进行验证。 整件事情奏效。智威汤逊是免疫的CSRF,这样我就可以禁用,在后端,
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
...
,但我已阅读(例如,here)有使用本地存储时的漏洞。
特别是localStorage可以通过JavaScript访问同一个域,暴露于XSS攻击。 解决它似乎我可以使用JWT Cookie。正如之前的链接所写,我可以设置HttpOnly cookie标志以避免通过JavaScript访问Cookie。
但是,使用Cookie我现在很容易受到CRSF攻击。
现在,here,我已阅读Angular 2+提供内置,默认情况下启用,反XSS。
所以问题是。我应该使用localStorage,并使用嵌入式Angular 2反XSS功能,或者这还不够,然后我应该将Cookie存储在JWT上以获得针对XSS攻击的保护,然后使用Spring在其上实现某种CRSF保护后端启动配置?
谢谢
编辑:网站是一种购物车。用户可以查看几乎所有 页面,但要他需要登录。
谢谢你的回答。我编辑了这个问题;我的网站将是一个有点购物车。在这种情况下,更好地遵循#2接近? – Shaunyl