Authorization Code 方式适用于有本身的服务器的应用。之因此叫这个名字,是由于流程中引入了一个叫作 authorization code 的东西。这个东西是一个一次性的临时凭证,用来换取 access token 和 refresh token。安全
鉴权服务器提供了一个相似这样的接口:服务器
https://www.xxx.com/exchange?code=&client_id=&client_secret=code
须要传入 code、client_id 以及 client_secret。验证经过后,返回 access token 和 refresh token。一旦换取成功,code 当即做废,不能再使用第二次。blog
为何要引入一个一次性的 code?token
先看流程图:接口
这个 code 的做用是保护 token 的安全性。上一节说到,Implicit 方式下,token 是不安全的。这是由于在 4 这一步当中直接把 token 返回给应用。而这一步容易被拦截、窃听。引入了 code 以后,即便攻击者可以窃取到 code,可是因为他没法得到应用保存在服务器的 client_secret,所以也没法经过 code 换取 token。而 5 这一步,为何不容易被拦截、窃听呢?这是由于,首先,这是一个从服务器到服务器的访问,黑客比较难捕捉到;其次,这个请求一般要求是 https 的实现。即便能窃听到数据包也没法解析出内容。ci
有了这个 code,token 的安全性大大提升。所以,Oauth2.0 鼓励使用这种方式进行受权,而 Implicit 方式则是在不得已状况下才会使用。it