Oauth2.0机制简单原理
资源服务器:即资源存放入口,或者说资源访问入口
鉴权服务器:对用户进行身份验证、并对客户端授权的地方
例子:A是客户端公司,B是云相册公司,A和B联手
B的用户在使用A的软件,用户在B部署在健全服务器上的鉴权页面输入密码后返回accesstoken给A,以此告诉A用户合法,用户才能在A*问B
所以接口会是类似于这个形式:GET/photos?accesstoken=
注:
如此,即实现了功能,也保障了安全性。不过你可能会问,这个 access token 和账号密码的区别是什么呢?都是代表用户身份的,为什么 access token 就更安全?答案是:
1,账号密码是一切,有了账号密码就几乎可以做任何事情(甚至改掉原密码)。而 access token 是有限制范围的。每个 access token 都有一个 scope,也就是允许执行哪些操作。
2,access token 是有有效期的。如果 access token 被窃取,也不能一直用。
Access Token机制
1.实现一个API:
GET/recieve_code?code=
这个API接收一个CODE参数,并提供这个API的URL,并且可在公网访问
2.当需要调用API时在你的app中打开平台提供的授权页面,并将第一步的URL传给这个页面。若用户同意授权并输入账号密码通过授权后,平台又会调用第一步的URL,并传过来一个CODE
3.使用CODE去兑换Access Token
平台必定有一个 api,接收 code 为参数,返回一个 access token 和一个 refresh token。在第一步的 api 中去调用这个平台 api。并且将获得的 access token 和 refresh token 保存在服务器上。到这里,就获取到可用的 access token 了。
注:
然而事情到这里还没完,是不是每一次需要调用平台的开放 api 的时候,都要重新获取一次 access token 呢?答案是否定的。在第三步中获取到的 access token 有一定的有效期,在过期之前可以一直重复使用。那么,access token 过期了之后怎么办呢?
首先,我们怎么知道 access token 已经过期?答案是在使用 access token 去访问平台的开放 api 的时候,如果 access token 已过期,api 会报错,返回一个 token 无效的错误。此时,我们应该用 refresh token 去刷新 access token。具体的做法是查找平台的文档,找到刷新 access token 的 api,这个 api 必定需要 refresh token 作为参数。按照文档去调用就可以了。