10分钟看懂OAuth2.0

OAuth,是Open Authorization的简写,叫开放授权。其他概念网上很多,这里直观的说下是怎么个过程。

模拟4个对象,用户、A应用、B应用、服务器(属于A应用公司)。用户使用A应用的账号登陆B应用。

1、B应用里嵌入了A应用的SDK,所以在B应用里点击“使用A应用账号登陆”的时候,就通过openUrl跳到A应用指定的登陆页面去了。在跳到A应用的过程中,B应用把自己的一些应用信息一并带过去了。

2、这个时候已经跳到A客户端了,A得到了B发过来的“B的应用信息”。这个时候A应用先把自己客户端里的用户信息和A的应用信息发给服务器,服务器返回了一个用户信息+A应用信息的access_token,这里我们叫access_token1。

3、(这一步页面上看不到变化,内部过程)A应用拿着access_token1和上一步收到的B的应用信息再发给服务器,得到了一个用户信息+B应用信息的access_token,这里叫access_token2。

4、这个时候,已经有了用户+B应用的access_token2(令牌)。授权完毕后自动跳回B应用,在跳回过程中,access_token2也发给B应用了。B拿着这个access_token2。就可以去申请服务器里的资源。

可能的问题:

1、为什么是access_token2给了B,而不是access_token1?

虽然服务器和A应用是一个公司的,但是服务器对所有应用都是一视同仁,(服务器只认token)谁要访问我的资源,谁就拿着用户信息+自身应用信息的access_token(令牌)来和我要资源。

2、为什么要先要一下access_token1,然后再要access_token2?

资源是在服务器,但这个账号是属于应用A的,如果B应用直接去问服务器的话,服务器又不知道B应用要的是哪个应用的资源。服务器上可是很多其他应用的资源。access_token1的过程就是A应用和服务器打个招呼,一会我会带B应用来申请我A应用的资源。

3、注意点:上面的例子并不是所有情况,也就是有的情况只有一个access_token产生过程。文章主要是举栗解释下access_token是什么东西,access_token一般就有由用户信息+应用信息组成的一个标识码。

4、为什么要用OAuth?

为了不暴露用户账户信息,上面例子中,用应用A登陆了应用B,但是应用B并不知道用户的用户名密码是什么。用户在授权页输入用户名密码或者是跳转到应用的时候,应用B是挂在后面等消息的。

接下来上一点其他地方载来的图:

OAuth 2.0的运行流程如下图,摘自RFC 6749
运行流程