一,简介
OAuth 是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
OAuth 在客户端与服务提供者之间,设置了一个授权层(authorization layer)。客户端不能直接访问服务提供者,只能访问授权层,以此将用户与客户端区分开来。客户端携带的令牌(token)用来指定权限范围和有效期,校验通过后,服务提供者根据令牌的权限范围和有效期,向客户端开放对应的资源。
二,四个角色
resource owner(资源拥有者)
即能够有权授予对保护资源访问权限的实体,即用户。
resource server(资源服务器)
承载受保护资源的服务器,能够接收使用访问令牌对受保护资源的请求并响应,它与授权服务器可以是同一服务器,也可以是不同服务器。微服务中的网关 Gateway 一般用作资源服务器。网关是作为各个微服务(会员服务、商品服务、订单服务等)统一入口,也就是这些资源服务的统一门面,在这里可以对 JWT 验签、JWT 有效期判断、JWT 携带角色权限判断。
client(客户端)
代表资源所有者及其授权发出对受保护资源请求的应用程序。
authorization server(授权服务器)
认证服务器,专门用来处理认证授权的服务器。
三,工作原理
当用户(资源所有者)尝试通过客户端(如网页应用、移动应用)访问资源服务器上的资源时,以下步骤将发生:
授权请求:客户端向授权服务器发起授权请求,用户被引导至授权服务器进行认证和授权。
授权码/访问令牌发放:用户授权后,授权服务器将发放授权码(Authorization Code)或直接发放访问令牌给客户端。
访问令牌换取(如果是授权码):客户端使用授权码向授权服务器换取访问令牌。
资源访问:客户端携带访问令牌向资源服务器发起请求,资源服务器验证访问令牌的有效性后,允许或拒绝访问。
四,OAuth2.0协议流程
1,用户打开客户端以后,客户端要求用户给予授权。
2,用户同意给予客户端授权。
3,客户端使用上一步获得的授权,向认证服务器申请令牌。
4,认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
5,客户端使用令牌,向资源服务器申请获取资源。
6,资源服务器确认令牌无误,同意向客户端开放资源。
简书认证流程例子:
五,客户端的授权模式
客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。
授权码模式(authorization code)
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)
评论区