• 开放平台_OAuth1.0


    OAuth1.0简介

    oauth1.0RFC制定的标准的第三方网站/客户端的认证服务

    规范文档在:

    http://www.ietf.org/rfc/rfc5849.txt

    网站使用oauth的目的是不让第三方开发者知道和记录用户的用户名和账号信息,用户在第三方应用登录服务的时候是在客户端提供的登录页面进行登录和验证的。

    国内几家大型网站都已经实现了oauth1.0,比如微博,腾讯,开心等

    下面以weibooauth1.0实现为例说明:

     

    oauth认证分服务器端和客户端

    客户端的步骤是:

    1 获取未授权的Request Token

    2 请求用户授权Request Token

    3 使用授权后的Request Token换取Access Token

    服务器端的步骤是:

    1 发放未授权request_token

    2 将用户转到本网站的用户登录页

    3 用户登录成功后,返回授权后的request_token和凭证

    4 发放最终可以使用的凭证access_token

    具体客户端和服务器端操作说明:

    1

    注册组件 

    当第三方在服务器网站注册了一个第三方组件,会获得appkeysecret

    appkey是第三方组件的唯一标识

    secret是第三方组件用来加密或其他处理的密钥(这个信息只有第三方应用和服务器端有)

    2

    客户端请求未授权的RequestToken

    接口:

    http://api.t.sina.com.cn/oauth/request_token

    调用的参数

    参数名

    必选

    介绍

    oauth_consumer_key

    true

    API Key(组件信息中的APP Key)

    oauth_signature_method

    true

    签名方法,暂只支持HMAC-SHA1

    oauth_signature

    true

    签名值

    oauth_timestamp

    true

    时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数

    oauth_nonce

    true

    单次值,随机生成的32位字符串(每次请求必须不同)

    oauth_callback

    true

    认证成功后浏览器会被重定向到这个url

    oauth_version

    flase

    版本号,如果填写必须为1.0

    其中的参数说明

    oauth_signature 是使用secret进行签名

    oauth_callbackoauth_timestamp是为了放重放的

    3

    服务器端接收到request_token的未授权请求

    应该有如下行为:

    1 生成request_tokenrequest_secret

    2 在服务器端记录下生成的request_tokenrequest_secret

    3 返回request_tokenrequest_secret

    4

    客户端接收到返回回来的request_tokenrequest_secret,使用这两个值来请求授权的request_token(即认证)

    接口:

    http://api.t.sina.com.cn/oauth/authorize

    请求参数:

    参数名

    必选

    意义

    oauth_token

    true

    上一步中获得的未授权的Request Token

     

    5

    服务器端收到认证请求

    做如下操作:

    1 将请求的oauth_token和服务器端已存的oauth_token进行比较,正确执行2,错误返回异常

    2 将客户端(比如浏览器)转到用户在weibo上的认证页面

     

    6

    客户端展示认证页面提供给用户登录认证

     

    7

    用户登录认证成功

     

    8

    服务器端等待用户登录认证成功之后

    1 生成request_token已验证的凭证oauth_verifier

    2 request_token和用户ID,应用ID,验证码oauth_verifier进行映射,并存储

    3 返回给客户端信息:

     

    参数名

    必选

    意义

    oauth_token

    true

    用户授权之后的Token值,与未授权Token值相同

    oauth_verifier

    true

    验证码

     

    oauth_verifier是已验证凭证

    4 转到用户请求未授权request_token时请求的oauth_callback地址

    (一般第二步和第三步是同时进行的,转到的oauth_callback地址的同时传递结果)

     

     

    9

    请求access_token 

    客户端现在已经有了:

    appkey //组件申请时获得

    secret //组件申请时获得

    request_token//组件请求未授权request_token时获得

    request_secret//组件请求未授权request_token时获得

    oauth_veifier//组件请求授权request_token时获得

     

    secret&request_secret作为加密的key对参数进行加密请求:

    (这步是来请求可以直接使用的凭证access_token)

     

    http://api.t.sina.com.cn/oauth/access_token

     

    参数

    参数名

    必选

    意义

    oauth_consumer_key

    true

    API Key

    oauth_token

    true

    第一步中获得的Request Token

    oauth_signature_method

    true

    签名方法,暂只支持HMAC-SHA1

    oauth_signature

    true

    签名值,(密钥为:APP Secret&Request Token Secret)

    oauth_timestamp

    true

    时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数

    oauth_nonce

    true

    单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)

    oauth_verifier

    true

    上一步请求授权request token时返回的验证码

    oauth_version

    flase

    版本号,如果填写必须为1.0

     

    10

    服务器端获取到access_token的请求做如下操作:

    1 校验request_token是否正确且已经被授权过(校验的内容有1 签名2 oauth_verifier 3 oauth_token)

    2 生成access_tokenaccess_token_secret

    3 access_tokenaccess_token_secret,用户ID,应用ID进行映射,并存在服务器数据库(长期有效)

    3 access_tokenaccess_token_secret返回

     

    11

    客户端使用access_tokenaccess_token_secret进行其他接口的请求

     

    参考文章:

    http://open.weibo.com/wiki/Oauth

    http://www.ietf.org/rfc/rfc5849.txt

    http://wiki.open.kaixin001.com/index.php?id=OAuth%E6%96%87%E6%A1%A3

    http://dev.baidu.com/wiki/app/index.php?title=OAuth1.0

     

    实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    linux以下安装dnw
    【Spark】Spark容错机制
    Codeforces Round #273 (Div. 2)
    IOS开发之简单计算器
    Andorid使用WiFi 连接adb进行调试
    i2c_set_clientdata函数【转】
    内核添加dts后,device和device_driver的match匹配的变动:通过compatible属性进行匹配【转】
    devm_kzalloc【转】
    RK3288 make otapackage 出错的问题【转】
    RK3288-OTA编译失败解决办法【转】
  • 原文地址:https://www.cnblogs.com/yjf512/p/2159509.html
Copyright © 2020-2023  润新知