




















OAuth(Open Authorization)是一种开放授权协议,允许用户授权第三方应用访问其在其他服务中的资源(如个人信息、照片等)目前的版本是2.0版(OAuth 2.0),其标准是:RFC 6749

OAuth在客户端与服务提供商之间,设置了一个授权层(authorization layer)客户端不能直接登录服务提供商,只能登录授权层获取令牌,以此将用户与客户端区分开来。客户端登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,指定授权层令牌的权限范围和有效期,客户端登录授权层以后,服务提供商根据令牌的权限范围和有效期,向客户端开放用户储存的资料。
很多场景都有采用OAuth2登录,例如登录ProcessOn或知识星球时可以使用微信登陆,登陆时会先跳转到微信的二维码页面,扫码登录后会再跳转到ProcessOn或知识星球,此时显示的是用户微信的昵称和头像,再比如使用GitHub登录Vercel时,也是先跳到GitHub的登录页面,输入用户名密码登陆后,跳转到Vercel,Vercel里面除了能展示用户GitHub的头像用户名等信息之外,还能获取用户GitHub中的仓库信息,甚至可以获取仓库中各分支下的源代码。这样就实现了脱离第三方系统进行认证,避免了用户直接将自己在微信等服务商的账户密码告诉ProcessOn等第三方平台进行获取数据所导致的安全问题。在这些场景下,上述的的客户端指的就是Vercel/知识星球/ProcessOn等第三方系统,服务提供商就是微信/GitHub。
OAuth2.0规定了四种获得令牌的流程和授权方式:
在详细讲解OAuth 2.0之前,需要了解几个专用名词
Resource Owner 资源所有者,本文中又称用户(user)
User Agent 用户代理,本文中就是指浏览器。
Third-party application 第三方应用程序,又称客户端
HTTP service HTTP服务提供商,本文中简称服务提供商
Authorization server 认证服务器,即服务提供商专门用来处理认证的服务器。
Resource server 资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
授权码模式(authorization code)是功能最完整、流程最严密的一种模式。它的特点就是通过客户端的后台服务器,与服务提供商的认证服务器进行互动,而且这种场景很常见,是toc场景下使用最多的OAuth授权模式,下面以微信扫码登陆知识星球为例具体说明:

隐藏式,又称简化模式(implicit grant type),不通过第三方应用程序的服务器,而是直接在浏览器中向认证服务器申请令牌,跳过了授权码这个步骤,因此得名。所有步骤可以在浏览器中完成,令牌对访问者是可见的。
和授权码模式不一样的是,客户端引导用户打开服务提供商认证页面,通过扫码或用户名密码认证后,跳转到指定的客户端系统页面,并直接在URL参数上传递访问令牌,省去了通过授权码再去获取令牌的过程。
密码模式中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向服务商提供商索要授权。
在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。
客户端模式指客户端以自己的名义,而不是以用户的名义,向服务提供商进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求服务提供商提供服务,其实不存在授权问题。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。