目录
我们可以看到在上述的授权过程中最关键的部分是获取token的那一步,这也是OAuth2.0的核心。有了这个token我们就可以访问到resource server上的资源,ABCD这几步都是为了获取这个token。
那么这个token到底包含了哪些信息呢?我们来从头分析一下,我们需要实现的是:让美图快印能够在不用小李用户名和密码的前提下访问到小李新浪微博账户相册中的特定图片。
注意上面加粗的部分,要实现这样的需求我们需要从token中解析出来下面3类信息:
- 客户端标识,表明是谁在请求访问资源(美图快印);
- 用户标识,得到了谁的许可(小李);
- 客户端能访问资源所有者的哪些资源以及其相应的权限。
有了上面的这些信息,那么资源服务器(Resouce Server)就可以区分出来是哪个第三方应用(Client)要访问哪个用户(Resource Owner)的哪些资源(以及有没有权限)
在上面的流程中出现了授权许可(Authorization Grant)这个概念,那到底它是什么意思呢?
书面解释是:授权许可是一个代表资源所有者授权(访问受保护资源)的凭据,客户端用它来获取访问令牌。
这个解释比较抽象,那么我们来翻译一下就是:授权许可是小李授予美图快印获得新浪微博相册的访问令牌的一个凭据。
那么我们该如何获得这个凭据呐,OAuth2定义了四种许可类型:
- Authorization Code:授权码;
- Implicit:隐式许可;
- Resource Owner Password Credentials:资源所有者密码凭据;
- Client Credentials :客户端凭据。
具体每一种许可类型到底怎么实现我们将放到后面详细讨论,本文不做详细解释。
写到最后:
总结:OAuth2.0是一套工业级的标准授权协议,可以很方便的解决第三方服务的授权而不需要资源所有者直接提供身份信息,它大大降低了我们在实现认证和授权时的复杂度。目前基于OAuth2.0实现的框架有很多,基于.NET Core实现最好的是IdentityServer4
在后续文章中我们将一起探讨IdentityServer4在.NET Core中的使用,欢迎持续关注。
如果你觉得本文写得不错,麻烦给个赞呗~~~
参考资料:
