Security 我的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] 后端从令牌中检索当前用户,并决定是否允许 要注销,只需从本地存储中删

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

我的登录/注销工作流:

  • 发出API调用以请求访问令牌。这些信息包括:
    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之上)