OAuth2安全标准
OAuth2是一个授权访问的标准,通过使用OAuth协议的HTTP访问授权资源;
OAuth2.0是怎么解决的呢?
正常情况下,要访问用户甲的QQ中的照片, 需要将账号和密码发送到QQ空间的认证服务器验证身份. 但是第三方应用要访问, 怎么办呢?或者说用户乙想要看用户甲的照片,怎么办呢?
给第三方应用paint一个临时密码,过期作废,而且这个密码的访问权限可由我随时取消.这样就足够安全了.
这个临时密码就是access_token. 当然发放access_token的方法就多种多样了,这些方法叫做授权模式
- 授权模式一共四种:
- 客户端模式(Client Credentials)
- 密码模式(User Credentials)
- 简化模式(Implicit)
- 授权码模式(Authorization Code)
OAuth2定义了四种角色
- 资源拥有者:一般是自己
- 资源服务器:托管受保护的数据的服务器(比如个人信息)
- 客户端:请求访问资源服务器的应用
- 授权服务器:负责向客户端颁发访问令牌的服务器,客户端可以带着令牌去请求资源服务器
令牌
令牌是由授权服务器生成的随机字符串,在客户端请求时发出;
- 访问令牌(Access Tokens)
允许第三方应用程序访问用户数据,由客户端作为参数发送,生存时间由授权服务器定义,另外必须维持保密性,一般对用户不透明,可能被客户端网站储存起来(存在session中也不一定) - 刷新令牌
随着访问令牌发出,但不同,不是每次请求都发送,仅用于发送到授权服务器;
注册成为客户端
如果你想要使用OAuth2从资源服务器上拿到数据,就必须注册成为授权服务器客户端,就是说,客户端要拿到授权服务器的访问令牌,OAuth2协议定义客户端必须指定参数和由授权服务器返回的参数。
- 客户端注册
应用名称:QQ
重定向URL:用于接收客户端授权码和访问令牌
授权类型:客户端用到授权类型
JavaScript源(可以不用)
- 授权服务器响应
客户端ID:唯一随机字符串
客户端密钥:必须保密密钥
授权码
何时用到?需要获得长时间的访问令牌,授权码可以使用刷新令牌进行续订;
-
隐式授予授权码
何时使用?使用JS的浏览器运行中,那么隐式授予不允许颁发刷新令牌;
如果授权访问,授权服务器将你重定向到网站,并在URL中携带访问令牌,如。http://jf-server.top#access_token=MDKADFKAJKJKJJ;
-
资源拥有者密码凭据授予
-
客户端凭据授予