【OAuth2.0学习笔记一】原理介绍

1、OAuth概述

OAuth是开放授权的意思,是一种标准的互联网协议。用处是,在用户授权的前提下,能够让第三方服务器读取用户存储在认证服务器上的信息,而这种授权无需用户提供用户名密码给第三方服务器。

比如,当我们第一次登陆CSDN时你没有CSDN的账号,但是CSDN允许你使用微博账号登陆,登陆之后CSDN自动读取了你的微博昵称和头像。这个授权过程中有三个角色

用户、微博、CSDN。OAuth的作用就是让微博用户允许的情况下,给CSDN访问权限(一个TOKEN),让CSDN在一定时间内能够访问用户微博上存储的特定资源,比如头像和用户名。

2、OAuth的认证流程

OAuth允许用户提供给第三方服务器一个Token,在这个Token的有效期内,第三方服务器可以拿这个Token到认证服务器上去读取用户允许的资源。每个第三方服务器都需要一个特定的Token。

整个过程的流程如下图:

上图中,Client代表第三方服务器(比如CSDN);Resource Owner代表用户;Authorization Server代表认证服务器(比如微博认证服务器);Resource Server代表微博资源服务器,上面存储用户的信息(比如昵称和头像等)。Authorization和Resource Server可以运行在一台机器上。

下面解释下授权流程:

A步骤,当用户使用微博账号登陆CSDN时,CSDN要求用户给予授权

B步骤,用户同意给予授权

C步骤,CSDN拿着用户给予的授权到微博认证服务器去认证

D步骤,微博认证服务器确认授权无误后,给予CSDN一个Token

E步骤,CSDN拿着Token到Resource Server上访问用户的资源,例如用户名和头像等

F步骤,资源服务器给确认Token无误,同意给CSDN发送资源。

3、OAuth授权模式

授权码模式Authorization code

特点是通过第三方服务器和认证服务器互动,获得Token和验证Token,不通过用户的浏览器。是最安全的一种模式。

简化模式implicit

特点是没有OAuth流程中的C和D步骤,而是用户留言器通过资源服务器发送的代码提取Token,并直接发送给第三方服务器。

密码模式resource owner password credentials

特点是用户提供用户名和密码给第三方服务器,但是第三方服务器不能存储用户名和密码。通常只有在用户对第三方服务器高度信任的情况下采用。

客户端模式client credentials

特点是需要用户在第三方服务器上注册,第三方服务器以自己的名义请求“服务提供商”进行认证。

4、OAuth授权码模式详解

上面四种模式,第一种授权码模式是最功能最完整,流程最严密的授权模式。其他模式都是授权码模式的简化版。授权码模式的详细流程:


上图中Resouce Owner代表用户,Client代表第三方服务器,User-agent代表用户的浏览器,Authorization Server代表授权服务器。

步骤A:第三方服务等待户登陆请求,用户登录后将用户重定向到认证服务器。例如使用QQ账号登陆百度,会将登陆窗口重定向到QQ登陆界面,如下图:

在QQ登陆的URL是:http://openapi.qzone.qq.com/oauth/show?which=Login&display=pc&client_id=100312028&response_type=code&display=pc&redirect_uri=http%3A%2F%2Fpassport.baidu.com%2Fphoenix%2Faccount%2Fafterauth%3Fmkey%3D57f392c0e9bdb416a4ee4b954bc9983d&scope=get_user_info,get_other_info,add_t,add_share,这里面包含了第三方服务器的client_id和redirect_uri。

步骤B,用户通过user-agent给予认证服务器授权。上图中,“百度将获得如下权限”就是这一个步骤。

步骤C,认证服务器获得用户授权之后,网页将重定向到第三方服务器,并将授权码发给第三方服务器。

步骤D,第三方服务器通过授权码和步骤A中的URI向认证服务器申请Token。

步骤E,认证服务器对授权码和第三方服务器的URI进行核对,如果核实通过,就发给第三方服务器一个Token。

至此,认证流程就完成了,第三方服务器可以到资源服务器去请求允许的资源了。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页