举个栗子先。小明在QQ*空间积攒了多年的照片,想挑选一些照片来打印出来。然后小明在找到一家提供在线打印并且包邮的网站(我们叫它PP*吧(Print Photo缩写 😂))。
那么现在问题来了,小明有两个方案来得到打印的服务。
针对方案(1):小明要去下载这些照片,然后给PP,小明累觉不爱,,,
针对方案(2):小明交出去自己的QQ账号密码,还要告诉PP哪些需要打印,哪些不需要,小明觉得自己有些小秘密不想给PP看,,,
小明觉得很痛苦,那么有没有不给PP账号密码,不下载照片,自己选哪些要打印直接扔给PP去打印的办法呢?OAuth走了过来扔给小明一块肥皂.
进入正题,在OAuth2的完整授权流程中有4个重要的角色参与进来:
其中Authorization server和Resource server可以是独立的服务提供商,也可以是在一起的,比如腾讯提供QQ空间作为资源服务器的同时也提供授权服务。
从这里可以看出,OAuth2在解决小明遇到的问题的过程中增加了一个Authorization server的角色。又印证了那句话,在计算机领域的所有问题都可以添加一个中间层来解决。
OAuth2解决问题的关键在于使用Authorization server提供一个访问凭据给Client,使得Client可以在不知道Resource owner在Resource server上的用户名和密码的情况下消费Resource owner的受保护资源。
在上述的OAuth完整流程中,(A)->(B)->(C)->(D)是授权的过程(参与者有小明,PP,QQ空间,Authorization server);(E)->(F)是消费资源的过程(参与者有PP和QQ空间)。
这其中比较重要的一个概念是访问令牌 ,它代表的信息是整个OAuth2的核心,也是ABCD这些步骤最终要得到的信息。
访问令牌是对PP可以在QQ空间访问小明的哪些信息这个完整权限的一个抽象,比如PP要访问小李在QQ空间的照片,那么就是另外一个访问令牌了。
访问令牌背后抽象的信息有哪些呢?如下3类信息。
有了这三类信息,那么资源服务器(Resouce Server)就可以区分出来是哪个第三方应用(Client)要访问哪个用户(Resource Owner)的哪些资源(以及有没有权限)。
参考:https://blog.csdn.net/Persims/article/details/126517101