首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全性: Java Spring Boot +角2+ JWT

安全性: Java Spring Boot +角2+ JWT
EN

Stack Overflow用户
提问于 2017-09-25 14:28:26
回答 2查看 905关注 0票数 3

我正在开发一个网站,使用Spring 1.5.7作为后端,角2作为前端。我是两种技术的新手,这是我第一次尝试开发一个网站。所以我在很多事情上有点困惑。

我已经通过JWT实现了用户身份验证。当用户通过凭据登录时,后端验证它们,然后创建一个JWT并将其返回到前端:令牌以这种方式添加到报头中:

代码语言:javascript
复制
Authorization - Bearer <jwt token>

在前面,我检查这个键是否在post响应中。如果它在那里,我将它与用户名一起添加到localStorage中。

代码语言:javascript
复制
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中检索一个令牌,并将其发送回后端进行验证。整件事起作用了。JWT对CSRF免疫,所以我可以在后端禁用它,

代码语言:javascript
复制
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
    ...

但我读过(例如,这里),在使用localStorage时存在漏洞。

特别是,localStorage可以通过同一域的JavaScript访问,暴露于XSS攻击。为了解决这个问题,我似乎需要一个JWT Cookie。正如前面在链接中所写的,我可以设置HttpOnly cookie标志,以避免通过JavaScript访问cookie。

但是,有了cookie,我现在很容易受到CRSF攻击。

现在,这里,我已经阅读了角2+提供内置,默认启用,反XSS.

所以问题是。我应该使用localStorage,只使用嵌入式的角2抗XSS功能,或者这还不够,然后我应该在cookie上存储JWT以获得对XSS攻击的保护,然后使用Spring配置在其上实现某种CRSF保护后端?

谢谢

编辑:网站是一种购物车。用户可以查看几乎所有的页面,但要支付费用,他需要登录。

EN

回答 2

Stack Overflow用户

发布于 2017-09-25 18:29:03

Aniruddha方法很好,但如果用户刷新浏览器,客户端应用程序将丢失令牌,因为DOM将重新加载浏览器刷新,所有内存数据(包括令牌)都将丢失。

现在回到你的方法-

  1. 本地存储- CSRF攻击是不可能的使用这种方法和应用程序将是无状态的,但它容易受到XSS攻击。默认的角度,做输出编码,以防止XSS攻击,但风险仍然存在与服务器端角度模板。为了减轻XSS攻击,如果存在一些敏感信息,您可以缩短令牌过期时间并对其进行加密。
  2. Cookie方法- HTTP将减轻XSS攻击,但您必须实现CSRF保护。您必须使用API网关模式来使应用程序无状态。

这两种方法都有正整数/缺点,您必须根据应用程序进行选择。如果您的应用程序与金融领域相关,那么我建议采用基于cookie的方法。

票数 2
EN

Stack Overflow用户

发布于 2017-09-25 14:51:34

在角度上,您可以在服务中持有您的令牌,并在需要时使用它。与java中的pojo一样,您可以创建一个带有getter和setter的角服务来保存令牌。向模块提供该服务,它将在所有componentdirectives中使用。

当应用程序在浏览器中打开时,令牌将在内存中,并将存储在浏览器中。

我想说的是,使用一个可观察的/Subject类型变量,这样它将等待从服务器中提取令牌并使用它来完成一些事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46407680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档