在日常的用户系统体系里面,我们经常会涉及到用户的登录认证体系,目前使用最广泛的就是oauth2.0的用户登录认证体体系,所以这里我们介绍下Oauth2相关的登录认证体系的实现。
什么是oauth2.0?
OAuth 是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源 (如头像、照片、视频等),并且在这个过程中无须将用户名和密码提供给第三方应用。通过令牌 (token) 可以实现这一功能。每一个令牌授权一个特定的网站在特定的时间段内允许可访问特定的资源。OAuth 让用户可以授权第三方网站灵活访问它们存储在另外一些资源服务器上的特定信息,而非所有的内容。对于用户而言,我们在互联网应用中最常见的 OAuth 应用就是各种第三方登录,例如 QQ授权登录、微信授权登录、微博授权登录、GitHub 授权登录等。
由此课件oauth应用场景是非常的广泛。
oauth2.0的认证流程
这里我们首先来一张图片,阐述下整个认证流程
整个流程如上图所示:
- (A) 用户打开客户端以后,客户端要求用户给予授权。 - (B) 用户同意给予客户端授权。 - (C) 客户端使用上一步获得的授权,向认证服务器申请令牌。 - (D) 认证服务器对用户端进行认证以后,确认无误,同意发放令牌。 - (E) 客户端使用令牌,向资源服务器申请资源。 - (F) 资源服务器确认令牌无误,同意向客户端开放资源。
网上有一个非常形象的案例介绍整个oauth登录的流程,这里我们分享下:
1.用户打开第三方网站如 (京东),用户点击了微信授权登录,此时 就会跳转到 微信的授权页面。 2.用户点击授权给京东后,进行授权认证,授权成功会进行回调到京东回调页面。 3.授权页面会发起请求向授权服务器索要授权令牌。 4.授权服务器将授权令牌进行返回,用户此时可以在第三方网站(京东)向 微信服务器携带令牌获取部分用户信息 。 5.用户此时可以在第三方网站(京东)向 微信服务器携带令牌获取部分用户信息 。 6.资源服务器将资源返回给第三方网站
从上面的案例我们能看到整个流程的介绍,大家应该都能明白了。
oauth2.0的授权模式
在oauth2.0中,一共有4种授权模式,分别为:
1)授权码模式:
授权码模式介绍:
常见的第三方平台登录功能基本都是使用这种模式。(安全性高)
授权码模式授权流程介绍:
1.用户点击授权登录,通过浏览器,会先到Github授权服务器 2.授权服务器此时会有一张页面是否允许授权登录 3.允许后才是把客户端信息发送给 授权服务器. 4.授权服务根据客户端密钥,授权模式等进行认证,成功后会颁发一个对象数据返回,如授权码模式就会颁发一个授权码给浏览器,最终浏览器跟重定向会我们的客户端。 5.客户端会再一次发送请求带着授权码以及重定向的URI再次想授权服务器获取令牌 6.授权服务器根据授权码进行比较,如果成功将返回一个令牌。
授权码模式的业务流程介绍:
1、用户访问第三方应用,第三方应用通过浏览器导向认证服务器。 2、用户选择是否给予用户端授权。 3、假设用户给予授权,认证服务器将用户导向客户端事先指定的 "重定向URI"(redirection URI),同时附上一个授权码。 4、客户端收到授权码,附上早先的 "重定向URI",向认证服务器申请令牌。这一步是在客户端的后端的服务器上完成的。对用户不可见。 5、认证服务器对授权码和重定向URI ,确认无误后。想客户端发送令牌(access token ) 和更新令牌(refresh token)。
授权码模式的核心参数:
https://www.aaa.com/oauth/authorize?response_type=code&client_id=CLENT_Id&redirect_uri=http://www.baidu.com&scope=read
2)简化模式:
简化模式介绍:
简化模式是不需要第三方服务端(客户端)参与,直接在浏览器中向授权服务器申请令牌(token),如果网站是纯静态页面,则可以采用这种方式。
简化模式的业务流程介绍:
1、第三方应用将用户导向认证服务器。 2、用户决定是否给予客户端授权。 3、假设用户给予授权,认证服务器将用户导向客户端指定的 “重定向URI”,并在URI的Hash部分包含了访问令牌。# token 。(也就是# 路径方式) 4、浏览器向资源服务器发出请求,其中包含上一步收到的 Hash 值。 5、资源服务器返回一个网页,其中包含的代码可以取出 Hash值中的令牌。 6、浏览器执行上一步获得脚本,提取出令牌。 7、浏览器将令牌发给客户端。
简化模式的核心参数:
https://www.aaa.com/auth/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=http://www.baidu.com&scope=read
3)密码模式:
密码模式介绍:
密码模式是用户把用户名/密码直接告诉客户端,客户端使用在这些信息项授权服务器申请令牌(token)。这需要用户对客户端高度信任,例如客户端应用和服务器提供商就是同一家公司。
密码模式的业务流程介绍:
1、用户向客户端提供用户名和密码 2、客户端用户和密码发给认证服务器,后者请求令牌 3、认证服务器确认无误后,向客户端提供访问令牌。
密码模式的核心参数:
https://www.aaa.com/com/token?grant_type=password&username=Username&password=PASSWORD&client_id =CLIENT_ID
4)客户端模式:
客户端模式介绍:
客户端模式是指客户端使用自己的名义而不是用户的名义向授权服务器提供申请授权。严格来说,客户端模式并不能算作 OAuth 协议解决问题的一种解决方案,但是对于开发者而言,在一些为移动端提供的授权服务器上使用这种模式还是非常方便的。
客户端模式的业务流程:
1、客户端想认证服务器进行身份认证,并要求一个访问令牌。 2、认证服务器确认无误后,向客户端提供访问令牌。
客户端模式的核心参数:
https://www.aaa.com/token?grant_type=client_credentials&client_idCLIENT_ID&client_secret=CLEINT_SECRET
在实际的业务场景中,这里的授权码模式和密码模式是最常使用的。因此大家需要对这两种模式深度的熟悉。
oauth2.0的核心接口
在oauth2.0中有一些核心的接口,这些接口不需要我们自己来实现,一般框架都自身已经实现好了,我们只需要进行配置后使用即可,oauth2.0核心接口如下:
/oauth/authorize:授权端点 ,固定授权入口路径 ,也是授权服务器的用户允许授权的页面 /oauth/token :获取令牌端点 /oauth/confirm_access:用户确认授权提交端点 /oauth/error:授权服务错误信息端点 /oauth/check_token:用于资源服务访问的令牌解析端点 /oauth/token_key:提供公有密钥的端点,如果使用 JWT 令牌的话
以上我们就主要介绍下oauth2.0的几个核心问题,更加全面的介绍大家查看官网即可。后面的文章我们主要是实战相关的系列。
还没有评论,来说两句吧...