zoukankan      html  css  js  c++  java
  • OAuth授权过程

    什么是OAuth授权?

    一、什么是OAuth协议
      OAuth(开放授权)是一个开放标准,所谓OAuth(即Open Authorization,开放授权),它是为用户资源授权提供了一种安全简单的标准,允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息。而这种授权无需将用户提供用户名和密码提供给该第三方网站而是直接从服务商提供的页面直接登录。

      OAuth允许用户提供一个访问标记(专业点叫做令牌)给第三方网站,一个访问标记(专业点叫做令牌)对应一个特定的第三方网站,同时该访问标记(专业点叫做令牌)只能在特定的时间内访问特定的资源,说白了就是:也就是说用户在访问第三方web或应用的时候,第三方在不知道用户的账号和密码的情况下 经过用户授权后就可以获取用户在服务商哪里存储的文章,微博信息等等信息。

    一、OAuth授权必须经过三个步骤

      第一步: 获取未授权的Request Token (请求标记)  跳转到服务商的登录页面

      第二步: 获取用户授权Request Token(请求标记) 用户输入账号密码进行登录授权

      第三步: 用授权过的Request Token(请求标记)  换取Access Token (访问标记)

      以上三个步骤是OAuth授权的必须步骤 ,可能很多公司的授权方式各有不同,但是大致步骤是一样的

    下面以新浪微博为例子 介绍下如何进行OAuth授权:

    1.首先你要成为新浪的开发者  点击这里进入开发者网站:http://open.weibo.com

    进入后注册一个账号 添加开发者个人信息 ,你可以直接用你的微博账号登录然后加入开发者即可,详细步骤这里不再赘述。

    2.创建应用如何创建应用,直接点击顶部导航栏的我的应用即可创建。

    *假设你创建的应用名称加做 "程序源微博"

    *应用创建完毕默认 就进入"开发阶段" 就具备了授权资格

    *这个时候点击我的应用 --> 应用信息 你会看到如下的信息

    App Key:917518064   应用的唯一标识

    App Secret:b18853174e2902fd05b04dc34d7be792  密钥

    应用地址:https://itunes.apple.com/cn/genre/ios/id36?mt=8

    这是时候我们还需要设置一个回调页面,就是授权成功后跳转的页面如何设置?

    点击编辑然后输入你要回调的页面网址即可

    2.有了上面的设置之后 我们就可以进行资源授权了 我们现在都是OAuth授权2.0

    (1)首先第一步获取未授权的Request Token来到服务器的登录界面

    *新浪提供的页面是这个页面:https://api.weibo.com/oauth2/authorize

    *必须要传递的两个参数: 

    client_id (string类型)     申请应用时分配的AppKey // 得知道给哪个应用授权
    redirect_uri (string类型)     授权回调地址 // 授权成功后跳转到哪个页面

    也就是说我们要正确的来到服务器提供的授权登录界面完整的url地址应该是这样的:

    https://api.weibo.com/oauth2/authorize?client_id=917518064&redirect_uri=http://www.cnblogs.com/syios

    打开上面的地址你会看到如下界面:

    此时我们输入我们的微博账号 这里也可以自己给自己授权也就是说你可以用户刚刚创建应用的账号 对你的应用进行授权

    当我们点击登录后 ,这次授权就成功了,当然如果你是第一次授权可能看到不是上面的界面 而是授权界面 这个时候你点击授权即可

    登录成功后回跳转到回调页面

    (2)获取授权过的Request Token 

    授权成功后回自动跳转到回调页面

    你会发现新浪会在回调页面后面拼接一个参数 这个参数code 就是授权成功后的 Request Token (请求标记)

    (3)根据授权过Request Token(请求标记) 获取一个Access Token(访问标记)

    这个时候新浪提供了另外一个地址 用来获取访问标记

    URL : https://api.weibo.com/oauth2/access_token

    当然也必须要传如下的参数 才能成功获取访问标记:

    client_id          string     申请应用时分配的AppKey。
    client_secret    string     申请应用时分配的AppSecret。
    grant_type       string     请求的类型,填写authorization_code
    code                string     调用authorize获得的code值。
    redirect_uri      string     回调地址,需需与注册应用里的回调地址一致

    这个时候我们只需要将所有的参数通过POST方式发送给新浪服务器之后我们会得到服务器的返回数据 返回结果如下:

    {
        "access_token" = "2.00vWf4GEUSKa7D739148f7608SXA9B";
        "expires_in" = 137596133;
        "remind_in" = 137596133;
        uid = 1258537523;
    }

    access_token: 就是我们需要的访问标记 我们只需要获取这个标记 保存即可

    uid:表示当前登录用户的ID

    这里需要大家明白一个知识点:

    access_token : 1个用户给1个应用授权成功后,就获得对应的1个access_token,作用是:允许1个应用访问1个用户的数据
    uid:1个用户对应1个uid,每1个用户都有自己唯一的uid
    举例:

    张三 /李四
    应用1 /应用2
    张三给应用1、应用2授权成功了:1个uid、2个access_token
    李四给应用2授权成功了:1个uid、1个access_token
    上面操作:产生了2个uid,3个access_token

    3.授权过程中的常见错误

    1.invalid_request
    1> 没有传递必填的请求参数
    2> 请求参数不对
    3> URL中间留有空格

    2.invalid_client
    1> client_id的值传递错误(AppKey不对)

    3.redirect_uri_mismatch
    1> 回调地址不对

    提醒:授权帐号注意  如果应用还没有经过新浪审核,只能访问自己或者其他15个测试帐号的微博数据

  • 相关阅读:
    sop服务治理
    调用链跟踪基本原理
    spring源码之bean的初始化及循环引用
    单调栈
    SpringBoot启动源码及自定义starter
    深入理解kafka
    Netty小结
    Oooooooooooooooooooooooooooooooooooooooooops, AN EMPTY AREA here.
    牛客OI周赛7-提高组 A 小睿睿的等式
    素数筛法求素数
  • 原文地址:https://www.cnblogs.com/fengmin/p/6185989.html
Copyright © 2011-2022 走看看