• OAth 2.0 的白话讲解


    一、OAuth2.0是什么,主要做什么用的?

    官方注解

    简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

    白菜话

    小明要访问我的网站,我想要保留用户的数据和操作保留粘黏性,所以我想要小明注册,然而小明很懒不想填写姓名邮箱什么的资料,顾客是上帝嘛,于是我就跟小明商量,咱们用你的qq账号登录好不好?小明同意了。然后我就跟qq客服申请了开通了授权登录(qq这么大平台为什么鸟我呢?因为授权登录对他来说没有损失什么,而且增加了qq对用户的粘黏性),小明点击登录的时候,我给他一个选项,使用qq账号登录,小明点击之后,我就把页面跳转到qq登录页面,要带着我跟qq申请的授权的商户id,小明登录他的qq号之后,qq再把页面跳转到我的网站,带着用户登录授权的凭证,我获取到凭证,去qq的服务器获取小明的信息,记录到我的服务器上,作为小明的登录凭证并且显示在小明的界面上。小明省了注册的麻烦,我获取了小明的信息,大家都很happy。

     

    二、OAth2.0授权的四种方式

    • 授权码(authorization-code)
    • 隐藏式(implicit)
    • 密码式(password):
    • 客户端凭证(client credentials)

    1 咱们继续小明授权的这个事,继续说。我是一个前端显示,后端服务器显示的网站,并且对于qq是最低级的商户,不是很信任我。所以我们之间的方式是授权码方式,授权方式基本分为三步

    这里贴个图,大概了解下,后面配详细说明

    a 获取授权码(这里注意的是这里是需要提前到qq的开发者平台申请商户id,并且用户需要在qq登录)

    这里的请求是一个get请求,需要添加

    response_type 请求目的

    client_id 申请的商户id

    state 自定义的csrf_token 用于回调验证(就是保证回调函数是我访问触发的,避免黑客模拟回调攻击接口)

    http://qq.xxx.com/oauth/get-code?
    response_type=code
    &client_id=1
    &state=xyz

    b 请求令牌(之后就不需要小明操作了,我会直接跟qq交流获取令牌)

    这里服务器之间的交互了,一般使用post请求

    http://qq.xxx.com/api/oauth/get-token
    参数
    grant_type       必填  请求类型    authorization_code
    client_id        必填  三方授权id  testid
    client_secret    必填  三方授权秘钥 XXXXXXXXXX
    code             必填  上一步获取的code
    

      

    c 获取用户信息(获取令牌后我就会用令牌获取小明的qq部分授权信息,2、3步骤对用户无感,因为很快很快)

    使用token获取用户信息
    http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
    参数 access_token 上一步获取的token

    2 如果我的网站是个大网站比如新浪微博,那么qq就不能这么对待我了,就不要什么code,而且大网站之间的交互量很大,要节约资源,所以就可以省下获取code这一步。这种方式叫做隐藏式(为什么这么叫呢,不知道也不敢问,反正翻译过来就这样)

     

    a 请求令牌,使用get方式

    https://api.mysite.com/authorize?
    response_type=token
    &client_id=TestClient
    &redirect_uri=https://myredirecturi.com/cb
    
    参数 
    response_type   必填 请求类型 token
    client_id       必填 三方授权id 
    redirect_uri    必填 回调跳转的url(一般都是在申请的时候设置的,发送之后qq会跟申请时候填写的url核对)    
    

      

      

    b 获取用户信息

    使用token获取用户信息
    http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
    参数 access_token 上一步获取的token

    3 我跟微博都是外部网站,要走授权这一步,如果是腾讯内部的网站呢,比如 lol,都是亲兄弟跳转qq登录界面,增加用户操作复杂度不是么?,直接用qq账号密码上了,这种方式叫做密码式

    a 请求令牌

    这里是服务器之间的交互了,一般使用post请求

    http://qq.xxx.com/api/oauth/get-token
    grant_type=password&username=bshaffer&password=brent123
    参数 
    grant_type    必填 请求类型 password
    client_id     必填 三方授权id lol 
    client_secret 必填 三方授权秘钥 XXXXXXXXXX 
    username      必填 用户明 bshaffer
    password      必填 用户密码 brent123
    

    b 获取用户信息

    使用token获取用户信息
    http://qq.xxx.com/api/oauth/get-user-info?access_token=b2d91c2764bdde79e4f1e92349b969e8ee031e8a
    参数 access_token 上一步获取的token

    4 某一天,网信办跟qq说,有人用qq贩卖违禁品,需要调取你的用户数据配合调查,qq吓的一机灵,赶紧提供了一个最大权限的特殊账户,网信办可以直接调取用户数据,不需要用户授权。

    POST方式
    http://qq.xxx.com/api/oauth/get-user-info
    grant_type      必填  获取方式  client_credentials
    client_id       必填  商户id    TestClient
    client_secret   必填  商户秘钥    TestSecret
    

      

    到这里,四种授权方式基本就将的差不多了。各位可以根据甲方爸爸的需求选择自己需要的方式。我这里是使用OAuth 2.0 Server PHP 实现的的授权码方式授权,点击这里查看实现的代码。

     

    参考文献

    OAuth2.0 官方文档  https://oauth.net/2/

    OAuth 2.0 Server PHP 官方文档 https://bshaffer.github.io/oauth2-server-php-docs/

    OAuth2.0的一个简单解释 阮一峰 http://www.ruanyifeng.com/blog/2019/04/oauth_design.html

    OAuth2.0的四种方式 阮一峰 http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

  • 相关阅读:
    冒泡排序&快速排序
    1252. Cells with Odd Values in a Matrix
    位运算小结
    832. Flipping an Image
    1812. Determine Color of a Chessboard Square
    10、属性、构造函数与析构函数
    09、封装与类成员
    07、面向对象简介
    06、C#异常处理
    03、运算符
  • 原文地址:https://www.cnblogs.com/haizizhu/p/13633477.html
Copyright © 2020-2023  润新知