我正在开发一个只通过RESTful API与后端通信的应用程序。现在,我的身份验证/授权都基于OAuth2协议。我想知道这是否足够安全。
我的登录/退出工作流程:
app_key
,app_secret
,username
,password
,grant_type
。将此令牌存储在本地存储中,表示此用户已登录。/api/profile
)时,前端会在请求标头中发送带有token
的Ajax请求:Authorization [token]
。 token
检索当前用户并决定是否允许。我打算添加HTML编码(以防止XSS)和HTTPS(以防止令牌爆炸)。
我很想知道,这种"简单"机制,它足够安全,以保护我的网站免受常见的攻击,如CSRF?
答案 0 :(得分:2)
您正在从客户端发送app_secret。这意味着客户端拥有app_secret,因此泄露给使用该网站的任何人。
对于OAuth2,它应该是Authorization: bearer [token]
OAuth2不用于身份验证,仅用于授权。您可能需要考虑基于OAuth2的OpenID连接。令牌允许持有者访问以执行某些操作,但确实证明请求者实际上是用户或用户委派的用户。考虑一辆带代客钥匙的昂贵汽车。此密钥是一种限制访问汽车的令牌。持有此令牌的任何人都可以开车(授权)。但是,这个令牌的使用并不能证明汽车的所有权(认证)。
您的注销机制并未真正将用户注销,因为令牌仍然有效。因此,如果有人有副本,该副本仍然有效。您应该考虑使用API调用来使令牌无效。
OAauth2 需要 HTTPS,因此需要到位。