Oauth2的作用就是让第三方应用在资源持有者授权的情况下,通过认证服务器的认证,从而安全的在资源服务器上获得对应的资源。
1、角色
在oauth规范中大致分为四个角色:
- 资源所有者(resource owner)
- 资源服务(resource server)
- 客户端(client)
- 认证服务(authorization server)
资源所有者提供资源,并通过授权允许客户端去访问资源。客户端得到授权后去认证服务认证并得到一个访问令牌,之后客户端就可以使用访问令牌去请求资源服务,获取想要的资源。
2、协议流程
3、授权类型
授权许可的类型分为4种:授权码授权、隐式授权、密码凭证授权、客户凭证授权。
- 授权码:使用一个code作为资源所有者和客户端的授权媒介,作为客户端能够通过认证服务的凭证。这样做就可以在认证过程中解耦资源所有者,想要通过认证,并不需要再次与资源所有者交流,降低了资源所有者信息暴露的风险。这是推荐的并且普遍使用的授权类型。
- 隐式授权:通过url去识别客户端,没有授权码之类的媒介,减少了客户与资源所有者交流的过程,能够直接的获取访问令牌。由于访问令牌在url片段中传输,有安全风险,这可能会将其公开给未授权方。
- 密码访问:使用资源所有者的密码凭证去认证,能够获得一个长期有效的令牌。风险系数高,访问权限不可控(权限同资源所有者)。这种方式只适用于高度信赖的客户端上。
- 客户凭证授权:通常在客户端代表自己行事(客户端也是资源所有者)对受保护资源的访问时使用。
4、访问令牌
访问令牌是请求受保护资源的凭证,通常以字符串形式返回给用户。访问令牌有scope限制,以及过期时间。他替代了用户名密码形式的校验,减少了敏感信息暴露风险。
5、刷新令牌
刷新令牌是用于访问令牌无效或过期时,向认证服务请求新的访问令牌的凭证。它通常和访问令牌一起返回给客户端,但至只用于和认证服务换取访问令牌,不会被发送给资源服务。