我的OAuth2登录安全吗?

时间:2016-04-05 08:30:34

标签: security oauth-2.0 xss csrf

我正在开发一个只通过RESTful API与后端通信的应用程序。现在,我的身份验证/授权都基于OAuth2协议。我想知道这是否足够安全。

我的登录/退出工作流程:

  1. 发出API调用以请求访问令牌。信息包括:app_keyapp_secretusernamepasswordgrant_type。将此令牌存储在本地存储中,表示此用户已登录。
  2. 在请求某些受限资源(例如/api/profile)时,前端会在请求标头中发送带有token的Ajax请求:Authorization [token]
  3. 后端从token检索当前用户并决定是否允许。
  4. 要注销,只需从本地存储中删除令牌即可。
  5. 我打算添加HTML编码(以防止XSS)和HTTPS(以防止令牌爆炸)。

    我很想知道,这种"简单"机制,它足够安全,以保护我的网站免受常见的攻击,如CSRF?

1 个答案:

答案 0 :(得分:2)

  1. 您正在从客户端发送app_secret。这意味着客户端拥有app_secret,因此泄露给使用该网站的任何人。

  2. 对于OAuth2,它应该是Authorization: bearer [token]

  3. OAuth2不用于身份验证,仅用于授权。您可能需要考虑基于OAuth2的OpenID连接。令牌允许持有者访问以执行某些操作,但确实证明请求者实际上是用户或用户委派的用户。考虑一辆带代客钥匙的昂贵汽车。此密钥是一种限制访问汽车的令牌。持有此令牌的任何人都可以开车(授权)。但是,这个令牌的使用并不能证明汽车的所有权(认证)。

  4. 您的注销机制并未真正将用户注销,因为令牌仍然有效。因此,如果有人有副本,该副本仍然有效。您应该考虑使用API​​调用来使令牌无效。

  5. OAauth2 需要 HTTPS,因此需要到位。