相关疑难解决方法(0)

在反应组件外部访问redux存储的最佳方法是什么?

@connect当我试图在反应组件中访问商店时,效果很好.但是我应该如何在其他一些代码中访问它.例如:假设我想使用授权令牌来创建可以在我的应用程序中全局使用的axios实例,那么最好的方法是什么?

这是我的 api.js

// tooling modules
import axios from 'axios'

// configuration
const api = axios.create()
api.defaults.baseURL = 'http://localhost:5001/api/v1'
api.defaults.headers.common['Authorization'] = 'AUTH_TOKEN' // need the token here
api.defaults.headers.post['Content-Type'] = 'application/json'

export default api
Run Code Online (Sandbox Code Playgroud)

现在我想从我的商店访问一个数据点,如果我试图在反应组件中使用它来获取它,那么这就是 @connect

// connect to store
@connect((store) => {
  return {
    auth: store.auth
  }
})
export default class App extends Component {
  componentWillMount() {
    // this is how I would get it in my react component
    console.log(this.props.auth.tokens.authorization_token) 
  }
  render() {...}
}
Run Code Online (Sandbox Code Playgroud)

那里有任何见解或工作流程模式吗?

reactjs redux react-redux

163
推荐指数
9
解决办法
9万
查看次数

构建安全 JWT 身份验证流程的指南?

最近我需要构建一个简单的 REST API,我阅读了关于最佳实践的不同文章,以尽可能减少我的 Web 应用程序的漏洞。在网上搜索,我找到了关于如何实现 JWT 令牌的不同教程,每个教程在某些方面都不同,我找不到一种节流良好的“通用方法”。最后,我实现了对我来说似乎最合理的解决方案,但我想确认这是处理此类身份验证的最有效方法。

在开始之前:

  • 注意 CORS 策略已实施
  • 为了签署令牌,我使用了“标准”库
  • 客户端和服务器之间的通信是加密的 (HTTPS)

#STEP 1:认证后生成令牌:

  1. 我生成了一个短期访问令牌(15 分钟)和一个用 HS256 算法签名的“长期”刷新令牌(7 天)(使用的密钥长度:512 位)
  2. 此外,我将刷新令牌的 ID 存储在缓存中。
  3. 我在响应中发回访问令牌(在客户端我只将它保存在内存中 [Redux]),同时我在 HTTPOnly cookie 中设置刷新令牌以使 XSS 攻击更加困难(并非不可能,我知道:目标是避免/减少窃取 cookie 的可能性)

#STEP 2:授权请求

为了授权请求,我只使用在请求标头中的字段中发送的访问令牌。仅当令牌有效时才允许请求。

#STEP 3:刷新访问令牌

为了刷新令牌,我向服务器发送刷新请求。服务器:

  1. 检查刷新令牌签名是否有效
  2. 检查刷新令牌是否在缓存中(检查是否过期并针对伪造令牌设置另一层防御)
  3. 生成新的访问令牌和新的刷新令牌,同时撤销先前的刷新令牌(并相应地更新缓存)
  4. 发送回响应中的访问令牌和仅 HTTP cookie 中的刷新令牌

有关刷新过程的更多信息

刷新被称为:

  1. 在访问令牌到期之前
  2. 在用户打开/刷新 Web 应用程序的确切时刻。这样,如果刷新令牌仍然有效,用户就会自动通过身份验证并准备好使用应用程序。注意刷新令牌只能用于刷新访问令牌,不能执行其他请求(为了避免CSRF攻击,cookie不能用于对请求进行身份验证,但用户需要加载网站才能获得访问令牌)

进一步的预防措施:关键操作

刷新令牌有两个过期时间。第一个,对于非关键操作,每次发布新令牌时都会刷新。这样,如果用户继续使用该应用程序,他/她可能会永远保持登录状态。对于关键操作,第二个(持续 3 小时)是“绝对的”。这意味着,在每次刷新时,关键操作的“计时器”不会刷新。

//To make it simpler:
nextToken.criticalExpiration=previousToken.criticalExpiration
Run Code Online (Sandbox Code Playgroud)

在“关键”计时器到期后调用刷新请求时,生成的访问令牌有一个字段为 false,表示执行关键操作的选项。如果为 false,则不允许进行关键操作(因此用户必须重新进行身份验证才能执行这些请求)

概括:

我想了解此过程是否正确执行或是否会产生漏洞。我知道在应用程序的其他部分和/或外部库中总是可能存在漏洞,但是,我想尽量减少留下可以被利用的东西的可能性。

security jwt reactjs redux

5
推荐指数
1
解决办法
212
查看次数

标签 统计

reactjs ×2

redux ×2

jwt ×1

react-redux ×1

security ×1