OAuth的原理认证流程及访问资源流程

    技术2022-05-19  28

    OAuth的原理认证流程及访问资源流程

    腾讯微博API通过以下四个步骤来完成认证授权并访问或修改受限资源的流程

    1.获取未授权的Request Token(temporary credentials)2.请求用户授权Request Token3.使用授权后的Request Token换取Access Token(token credentials)4.使用 Access Token 访问或修改受保护资源

    其中1~3步使用https方式, 第4步使用http方式。

    请求签名说明

    所有TOKEN请求和受保护的资源请求必须被签名,微博开放平台会根据签名来判断请求的合法性。签名算法使用Signature Base String和密钥(Secret)生成签名,参数oauth_signature用于指定签名。

    说明:

    Signature Base String由以下三部分组成,各项之间使用&符号分隔。

    1、Http Method 请求方法,GET/POST

    2、URL Encode之后的请求URL(URL要小写) 例如: 请求URL:https://open.t.qq.com/cgi-bin/request_token 经URL Encode之后的请求URL为: https://open.t.qq.com/cgi-bin/request_token

    3、URL Encode并排序之后的请求参数 例如: URL请求参数为: oauth_callback=www.qq.com&oauth_consumer_key=49b0bes7352943a1a5609f9e30346201&oauth_nonce=90523669&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298513816&oauth_version=1.0 经URL Encode并排序之后的请求参数格式如下(参数间使用&(即&符号)分隔): oauth_callback=www.qq.com&oauth_consumer_key]49b0bes7352943a1a5609f9e30346201&oauth_nonce=90523669&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298513816&oauth_version=1.0

    算法伪码:

    httpMethod + "&" + url_encode( base_uri ) + "&" + sorted_query_params.each { | k, v | url_encode ( k ) + "=" + url_encode ( v ) }.join("&")

    密钥由App Secret和Token Secret组成(中间使用&符号分隔) 签名算法目前只支持HMAC-SHA1。

    获取未授权的Request Token

    通过访问以下 URL 获取未授权的 Request Token

    https://open.t.qq.com/cgi-bin/request_token

    请求参数

    参数意义oauth_consumer_keyApp Key(应用信息中的App Key值)oauth_signature_method签名方法,暂只支持HMAC-SHA1oauth_signature签名值,密钥为:App Secret。计算说明。oauth_timestamp时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数oauth_nonce单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)oauth_callback认证成功后浏览器会被重定向到这个url中oauth_version(可选)版本号,如果有必须为“1.0”

    返回参数

    参数意义oauth_token未授权的Request Tokenoauth_token_secret对应的Request Token Secretoauth_callback_confirmed对oauth_callback的确认信号

    说明:

    ① 用户授权后web应用将会重定向到oauth_callback。当应用为pc客户端或手机客户端应用时,没有回调url(oauth_callback)的概念,此时设置为字符串null即可。字符串“null”必须是小写

    ② 时间戳与标准时间偏差不得大于8分钟。

    示例:

    request_token

    https://open.t.qq.com/cgi-bin/request_token?oauth_callback=null&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls&oauth_signature=exxzU/tTbpdicmYHcyYh5kqgYgo=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569145&oauth_version=1.0

    参数名参数值oauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfcoauth_signature_methodHMAC-SHA1oauth_signatureexxzU/tTbpdicmYHcyYh5kqgYgo=oauth_timestamp1299569145oauth_nonceyQDMuXvdcEfQs2Mzf3XcT1r36WTULJlsoauth_callbacknulloauth_version1.0

    返回结果:

    oauth_token=hdk48Djdsa&oauth_token_secret=xyz4992k83j47x0b&oauth_callback_confirmed=true

    参数名参数值oauth_tokenhdk48Djdsaoauth_token_secretxyz4992k83j47x0boauth_callback_confirmedtrue

    请求用户授权Request Token

    此步骤的目的是请求用户授权Request Token,请求URL:

    https://open.t.qq.com/cgi-bin/authorize

    请求参数:

    参数意义oauth_token上一步中获得的未授权的Request Token

    返回参数:

    参数意义oauth_token用户授权之后的Token值,与未授权Token值相同。oauth_verifier验证码

    说明:

    ①此页面中会要求用户登陆,然后选择同意或者拒绝对应用授权。

    ②授权成功后:

    A: web应用会重定向到oauth_callback所指定的URL(含返回参数)。B: 客户端应用(oauth_callback=null)会在网页中给出授权码,用户需要手工将验证码输入到应用中才能完成授权流程。

    示例:

    参数意义oauth_tokenhdk48Djdsaoauth_verifier473f82d3

    oauth_token=hdk48Djdsa&oauth_verifier=473f82d3

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

    用户完成授权后,第三方应用可以通过访问如下url,将已授权的Request Token换取Access Token。Access Token将被用于访问或修改受限资源。

    https://open.t.qq.com/cgi-bin/access_token

    请求参数:

    参数意义oauth_consumer_keyAppKeyoauth_token第一步中获得的Request Tokenoauth_signature_method签名方法,暂只支持HMAC-SHA1oauth_signature签名值,密钥为:App Secret&Request Token Secret。计算说明。oauth_timestamp时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数oauth_nonce单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)oauth_verifier上一步请求授权request token时返回的验证码oauth_version(可选)版本号,有的话必须为“1.0”

    返回参数:

    参数意义oauth_tokenAccess Tokenoauth_token_secreateAccess Token Secret

    说明:

    ①本步骤用于签名的密钥为App Secret和Request Token Secret(中间使用&分隔)②获得返回值后就可以使用Access Token来访问资源了。③Access Token和Access Token Secret永远不会过期,直到用户撤销应用授权或腾讯回收您的app访问权限才会失效。

    用于签名的Signature Base String格式如下:

    示例:access_token:

    https://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=y2FrX7Muouma5vxWTKngEb7uHkRu4P5u&oauth_signature=209vcEaHkmb/QwHqsRU3HRPvlqw=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569210&oauth_token=6b99583b7bc8446bb57e86128158994f&oauth_verifier=877973&oauth_version=1.0

    参数意义oauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfcoauth_token6b99583b7bc8446bb57e86128158994foauth_signature_methodHMAC-SHA1oauth_signature209vcEaHkmb/QwHqsRU3HRPvlqw=oauth_timestamp1299569210oauth_noncey2FrX7Muouma5vxWTKngEb7uHkRu4P5uoauth_verifier877973oauth_version(可选)1.0

    返回结果:

    oauth_token=nnch734d00ls2jdk&oauth_token_secreate=pdkkdhi9sl3r4s00

    参数意义oauth_tokenoauth_token_secreatennch734d00ls2jdkpdkkdhi9sl3r4s00

    至此,您的应用就取得了用户的授权,请妥善保管获得的Access Token和Access Token Secret。

    此后,您的应用就可以使用该Access Token访问腾讯微博了。

    使用Access Token访问腾讯微博

    获得Access Token之后,您的应用就可以使用该Access Token访问腾讯微博。

    在每次调用接口API时,请求都必须包含以下参数:

    参数意义oauth_consumer_keyAppKeyoauth_tokenAccess Tokenoauth_signature_method签名方法,暂只支持HMAC-SHA1oauth_signature签名值,密钥为:App Secret&Access Token Secret。计算说明。oauth_timestamp时间戳oauth_nonce单次值

    示例:

    调用API:http://open.t.qq.com/api/t/add 发布一条微博:

    参数包括: 1)接口参数:content和format; 2)OAuth协议参数

    参数参数值content来自#weibo_SDK#的测试消息!formatjsonoauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfcoauth_nonceTld5QvrtTlRJvaSWPlCC7DIXxnTBeumDoauth_signatureJuPSe7ibf0uPECp4HcX4Fu9y3l0=oauth_signature_methodHMAC-SHA1oauth_timestamp1299569293oauth_tokenb8c8f1a888ea4f2887eac88787b6e895oauth_version1.0

    post:

    http://open.t.qq.com/api/t/add?content=来自#weibo_SDK#的测试消息!&format=json&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD&oauth_signature=JuPSe7ibf0uPECp4HcX4Fu9y3l0=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569293&oauth_token=b8c8f1a888ea4f2887eac88787b6e895&oauth_version=1.0


    最新回复(0)