角色
- 资源所有者(Resource Owner):通常是用户,如昵称、头像这些资源的拥有者(用户只是将这些资源放到服务提供商的资源服务器中)
- 第三方应用(Client):希望使用资源服务器提供的资源
- 认证服务器(Authorization Server):专门用于对资源所有者的身份进行认证,对要访问的资源进行授权、产生令牌的服务器。访问资源需要通过认证服务器由资源所有者授权才可以访问
- 资源服务器(Resource Server):存储用户的资源,验证令牌有效性。比如:维系资源服务器存储了微信用户信息
- 服务提供商(Service Provider):认证服务和资源服务归属于一个机构,该机构就是服务提供商
授权码模式(Authorization Code)
OAuth在第三方应用和服务提供商之间设置一个授权层,第三方应用不能直接登录“服务提供商”,只可以通过授权层将“第三方应用”和“用户”区分开来。“第三方应用”通过授权层获取令牌(AccessToken),获取令牌后通过令牌去访问服务提供商。令牌和用户密码不同,可以指定授权层令牌的权限范围和有效期,“服务提供商”根据令牌的权限范围和有效期,向“第三方应用”开放用户对应的资源。
工作流程:
- 第三方应用向认证服务器请求授权
- 用户告知认证服务器同意授权(通常是通过用户扫码或输入“服务提供商”的用户名密码的方式)
- 认证服务器向第三方应用告知授权码(code)
- 第三方应用使用授权码(code)申请Access Token
- 认证服务器验证授权码,颁发Access Token