Security 我的OAuth2登录是否足够安全?
我正在开发一个只通过RESTful API与后端通信的应用程序。现在,我的身份验证/授权都基于OAuth2协议。我想知道这是否足够安全 我的登录/注销工作流:Security 我的OAuth2登录是否足够安全?,security,oauth-2.0,xss,csrf,Security,Oauth 2.0,Xss,Csrf,我正在开发一个只通过RESTful API与后端通信的应用程序。现在,我的身份验证/授权都基于OAuth2协议。我想知道这是否足够安全 我的登录/注销工作流: 发出API调用以请求访问令牌。这些信息包括:app\u key,app\u secret,用户名,密码,授权类型。将此令牌存储在本地存储器中,表示此用户已登录 当请求一些受限资源时,例如/api/profile,前端使用请求头中的令牌发送Ajax请求:授权[token] 后端从令牌中检索当前用户,并决定是否允许 要注销,只需从本地存储中删
app\u key
,app\u secret
,用户名
,密码
,授权类型
。将此令牌存储在本地存储器中,表示此用户已登录/api/profile
,前端使用请求头中的令牌发送Ajax请求:授权[token]
李>
后端从令牌中检索当前用户,并决定是否允许
要注销,只需从本地存储中删除令牌
我计划添加HTML编码(防止XSS)和HTTPS(防止令牌爆炸)
我想知道,这种“简单”的机制,是否足够安全,以保护我的网站免受常见的攻击,如CSRF
您正在从客户端发送app_secret。这意味着客户端拥有app_的秘密,因此它会泄露给任何使用该站点的人
对于OAuth2,它应该是授权:承载者[令牌]
OAuth2不用于身份验证,仅用于授权。您可能需要考虑基于OAuth2的OpenID连接。令牌授予持有者执行某些操作的权限,但确实证明请求者实际上是用户,或者是用户委托的人。考虑一辆昂贵的汽车,有一个代用钥匙。这把钥匙是一种可以有限地进入汽车的代币。任何持有此代币的人都可以驾驶汽车(授权)。但是,使用此令牌并不证明车辆的所有权(身份验证)
您的注销机制不会真正将用户注销,因为令牌仍然有效。因此,如果有人有副本,该副本仍然有效。您应该考虑API调用来无效令牌。
OAauth2需要HTTPS,因此需要有HTTPS。谢谢@Erlend。但是OAuth2不是用于身份验证的吗?我正试图得到一个类似谷歌账户的系统。那么Gmail帐户就可以进行身份验证了,是吗?另一点是,我认为客户端知道这个秘密是可以的,因为客户端必须在我的系统中注册一个应用程序才能登录。客户有责任确保应用程序的安全保密,就像谷歌应用程序一样。我说的对吗?谷歌正在使用OpenID连接:(它构建在OAuth 2之上)