zoukankan      html  css  js  c++  java
  • OAuth 2.0 原理、流程、使用及解释

    最近应客户的要求,我们公司对客户的原有系统,进行了升级,增加了 OAuth 2.0 的功能。

    开发过程中,搜索了网上的资料,发现都解释不清。可能是相关作者,只熟悉前端、后端之一,说不清楚完整流程。我们边理解、边猜测、边开发调试,终于完成了此系统的改造。

    之后,公司对本公司的软件产品:折桂打印平台系统/折桂上传平台系统、折桂单点登录系统,均增加了 OAuth 2.0 功能,也有机会,同时开发 OAuth 2.0 使用方的软件、 OAuth 2.0 服务提供方的软件,完成之后,决定写一遍这方面的流程文章,作为总结。

    网上的 OAuth 2.0 介绍,也有一些交互流程图,但都比较简单、概要,难以理解。

    这里整理一份详细的 OAuth 2.0 authorization_code 模式的交互流程图,如下:

    相关解释如下:

    绿色宽箭头,为用户在 IE 浏览器的主动操作;

    蓝色宽箭头,为IE浏览器的自动跳转,用户能看到,但不是用户的主动操作;

    紫色宽箭头,两个服务器之间的交互,用户看不到;

    OAuth 详细流程的步骤如下:

    1. 用户使用浏览器,输入网址,访问 server_a 的某个网址。

    2.server_a 检查用户是否已登录,如果没有,则指示用户浏览器,自动跳转到 OAuth 登录服务器 server_oauth,网址参数中,带 redirect_uri ,也就是说,登录完成后,还得到我这里来。

    3. OAuth 登录服务器 server_oauth, 检查用户是否已登录。请注意,同一个用户 IE ,在 server_a 、server_oauth 两台服务器处,登录状态可以不一样。

    4. 如果用户未在登录服务器 server_oauth 处登录,则 server_oauth 显示登录页面(网页)

    5. 用户录入用户名、密码。此处可能有别的登录方式,比如,扫描登录,员工卡登录,等等。

    6. 用户勾选“允许应用 server_a 使用我的基本用户信息(密码除外)”。此步骤,按理是不能略过的。但有的 OAuth 登录服务器 ,不显示此选择项,或者只以文字提示、用户不用去勾选。孰优孰劣,一时也难以评说。

    7. 如果用户登录成功,则登录服务器 server_oauth 标记此用户为已登录状态,后台可能记录登录时间、远程 IP 地址等信息。

    8. 登录服务器 server_oauth 指示用户浏览器,自动跳转到 server_a 服务器,此处网址为上述步骤 2 中的  redirect_uri 。

    9. 服务器 server_a ,在  redirect_uri 网址对应的后台程序中,处理用户的 OAuth 登录过程。

    9.1 服务器 server_a 获取网址参数中的 code, 这是 OAuth 技术中的"授权码"。这个授权码,有效期比较短。当然,不同的 OAuth 登录服务器,配置不同,可能是几秒钟,可能是10分钟。

    9.2  服务器 server_a 以"授权码" 向 OAuth 登录服务器 server_oauth 索取 token ,即 OAuth 技术中的"令牌"。这一步骤,用户处 IE 浏览器看不到。令牌的有效期较长。同样的,不同的 OAuth 登录服务器,配置不同,可能是15分钟,可能是几天。这一步骤操作,一般是 HTTP GET 请求(request).

    9.2.1 OAuth 登录服务器 server_oauth,以 json 字符串形式,返回 token 数据,作为 9.2 步骤的结果。这一步骤,是 HTTP GET 的结果(response)。

    9.2.2 服务器 server_a 解析得到的 token json 字符串,获取 token 数值。

    9.3 服务器 server_a 以"token 数值" 向 OAuth 登录服务器 server_oauth 索取用户资源,此处一般只有用户基本信息,比如登录账号、用户全名、电子邮件、电话等,不涉及密码。这一步骤操作,一般是 HTTP GET 请求(request).

    9.3.1 OAuth 登录服务器 server_oauth,以 json 字符串形式,返回用户基本信息数据,作为 9.5 步骤的结果。这一步骤,是 HTTP GET 的结果(response)。

    9.3.2 服务器 server_a 解析得到的 user info json 字符串,获取用户基本信息数据。

    9.4 服务器 server_a 保存用户基本信息,并标记为已登录用户

    9.4.1 一般来说,服务器 server_a 会检查此用户登录账号(qq 号,或电子邮件,或域账号...),是否为本地已存在的用户。如果不是,则创建本地用户。

    9.4.2 服务器 server_a 保存当前远程 IE 用户对应的信息,一般是后端保存用户登录账号到 HTTP session。此步骤即标记当前用户为已登录状态、并记住当前登录用户是谁。

    9.4.3 服务器 server_a 保存当前远程 IE 用户对应的 OAuth token,一般也是保存到 HTTP session。

    10. 服务器 server_a 指示用户浏览器,自动跳转到本服务器的另一个网址。此处不同的系统,实现的功能不同。一般是跳转到“本系统里已登录用户的默认首页”,也有的系统,会跳转到以上步骤 1 的网址。

    11. 服务器 server_a 后端检查用户在本系统的网页操作权限,各系统自行实现功能,此处不详细描述。

    以上,即 OAuth 2.0 的完整交互过程。

    -------欢迎转载,转载请注明出处:https://www.cnblogs.com/jacklondon/ 

  • 相关阅读:
    jQuery制作焦点图(轮播图)
    mysql 存储引擎的选择
    linux 系统操作
    把网页转换成doc 格式的文件,方便用户下载PHP 方法
    多年级勾选
    zend studio 破解
    win7下安装Linux实现双系统全攻略
    【Linux】Linux中常用操作命令
    PHP xmapp 下面安装 Composer-Setup.exe
    ecshop中smarty比较操作符(eq,ne,neq)含义
  • 原文地址:https://www.cnblogs.com/jacklondon/p/oauth_2_workflow_in_authorization_code_mode.html
Copyright © 2011-2022 走看看