1. 程式人生 > >關於Oauth1.0認證及認證後呼叫API的方法

關於Oauth1.0認證及認證後呼叫API的方法

假設已經拿到以下 consumer_key:

{
        'consumer_key':  '79a7578ce6cf4a6fa27dbf30c6324df4',
        'consumer_secret': 'c7ed87c12e784e48983e3bcdc6889dad'
}

並且拿到使用者的授權,得到以下 oauth_token:

{
        'oauth_token':'fa361a4a1dfc4a739869020e586582f9',
        'oauth_token_secret':'0183ce137e4d4170b2ac19d3a9fda677'
}

假設伺服器地址為 openapi.kuaipan.cn,現在需要向 http://openapi.kuaipan.cn/1/fileops/create_folder 用GET方法發出請求,請求引數 (parameters) 如下:

{
        'oauth_version': '1.0', 
        'oauth_token': 'fa361a4a1dfc4a739869020e586582f9', 
        'oauth_signature_method': 'HMAC-SHA1', 
        'oauth_nonce': '58456623', 
        'oauth_timestamp': 1328881571, 
        'oauth_consumer_key': '79a7578ce6cf4a6fa27dbf30c6324df4', 
        'path': '/
[email protected]
', 'root': 'kuaipan' }

首先計算字元基串 (base string),參考演算法(虛擬碼)可以為:

http_method + "&" +
url_encode( base_uri ) + "&" +
url_encode(
        “&”.join(
                sort( [url_encode ( k ) + "=" +url_encode ( v ) for k, v in paramesters.items() ]
        )
)

注意點:

  1. http_method只能為大寫,本例子中是GET;
  2. base_uri是不包括 "?" 號和其右邊的query引數的uri,本例中是http://openapi.kuaipan.cn/1/fileops/create_folder ,傳輸協議,主機地址必須用小寫,請不要包含埠號,請求路徑也是大小寫區分;
  3. 引數(parameters)按照其引數名的字典序排序,本例子的順序是[oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version, path, root];
  4. urlencode編碼的字元需要用utf8轉編碼,16進位制部分需要大寫,如等號”=”是%3D而不是%3d;
  5. urlencode規則:只有字母數字和[.-_~](紅色部分,不包括方括號)不用encode,其他字元都需要,例如urlencode(".-_~+*")=".-_~%20%2B%2A"

這樣我們根據演算法生成字元基串如下(注意藍色部分是%2540而不是%40):

GET&http%3A%2F%2Fopenapi.kuaipan.cn%2F1%2Ffileops%2Fcreate_folder&oauth_consumer_key%3D79a7578ce6cf4a6fa27
dbf30c6324df4%26oauth_nonce%3D58456623%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1328881571
%26oauth_token%3Dfa361a4a1dfc4a739869020e586582f9%26oauth_version%3D1.0%26path%3D%252Ftest%2540kingsoft.com
%26root%3Dkuaipan

然後生成簽名加密的金鑰(記得有個&),注意假如沒有oauth_token的話,藍色部分是不用包含的:

c7ed87c12e784e48983e3bcdc6889dad&0183ce137e4d4170b2ac19d3a9fda677

假如沒有oauth_token的話,金鑰為 c7ed87c12e784e48983e3bcdc6889dad&,在本例子中,有oauth_token。

使用金鑰通過HMAC-SHA1演算法簽名字元基串,生成簽名(先生成數字簽名,然後再用base64 encode):

pa7Fuh9GQnsPc+Lcn+Qu6G7LVEU=

最後把urlencode後的簽名作為oauth_signature的值,向連線發出請求:

curl –k 
"http://openapi.kuaipan.cn/1/fileops/create_folder?oauth_version=1.0&oauth_signature=pa7Fuh9GQnsPc%2BLcn
%2BQu6G7LVEU%3D&oauth_token=fa361a4a1dfc4a739869020e586582f9&oauth_signature_method=HMAC-SHA1&oauth_nonc
e=58456623&oauth_timestamp=1328881571&path=%2Ftest%40kingsoft.com&oauth_consumer_key=79a7578ce6cf4a6fa27
dbf30c6324df4&root=kuaipan"

相關推薦

關於Oauth1.0認證認證呼叫API方法

假設已經拿到以下 consumer_key: { 'consumer_key': '79a7578ce6cf4a6fa27dbf30c6324df4', 'consumer_secret': 'c7ed87c12e784e48983e3b

Sqlserver呼叫api 方法示例

雖然使用sqlserver去呼叫服務介面的情況比較少,但也可以去了解下對應的使用情況 一、首先要開啟元件的配置 按 Ctrl+C 複製程式碼   按 Ctrl+C 複製程式碼   二、呼叫webservice 1、介面資訊獲取 呼叫webservi

React - 元件的生命週期詳解(各階段呼叫方法

轉自http://www.hangge.com/blog/cache/detail_1473.html React - 元件的生命週期詳解(及各階段呼叫的方法) 2016-12-22釋出:hangge閱讀:2699 ReactJS 的核心思想是元件化,即按功能封裝成一個一個的元

WKWebView的canGoBack屬性設定,呼叫goBack方法無效

在viewDidLoad方法裡面呼叫了jct_addWebView - (void)jct_addWebView{ JCTWebView *webView = [[JCTWebView al

Android中呼叫js方法js中呼叫本地方法

Android中內建了WebKit模組,而該模組的Java層檢視類就是WebView,所有需要使用Web瀏覽器功能的Android都需要建立該檢視類物件顯示和處理請求的網路資源。目前WebKit支援Http、Https、Ftp和JavaScript請求。下面我們重點看一下如

import android.support.v4.app.Fragment呼叫add方法報錯

首先需要匯入android-support-v4.jar包,方法見下: 進入Android\sdk\extras\android\support\v4,將其中的android-support-v4.jar複製,拷貝到android專案的app/libs下,右鍵點選jar檔案

redis-5.0 cluster帶認證客戶端連線

      Redis在3.0版正式引入redis-cluster叢集這個特性。Redis叢集是一個提供在多個Redis間節點間共享資料的程式集。Redis叢集是一個分散式(distributed)、容錯(fault-tolerant)的Redis記憶體K/V服務,叢集可以使

redis-5.0 cluster帶騰訊分分彩出售認證客戶端連線

      Redis在3.0版騰訊分分彩出售 dsluntan.com Q:3393756370 VX:17061863513正式引入redis-cluster叢集這個特性。Redis叢集是一個提供在多個Redis間節點間共享資料的程式集。Redis叢集是一個分散式(distr

postMan5.0.2postMan Interceptor chrome外掛離線安裝,(實現登入認證)

postMan5.0.2及postMan Interceptor離線安裝,(實現登入認證) 這是一種直接通過打包已經安裝的擴充套件程式的方式,進行離線安裝 首先下載postMan及postMan Interceptor,解壓縮到你喜歡的位置。 https://do

Redis 5.0 Cluster叢集帶認證客戶端連線

Redis在3.0版正式引入redis-cluster叢集這個特性。Redis叢集是一個提供在多個Redis間節點間共享資料的程式集。Redis叢集是一個分散式(distributed)、容錯(fault-tolerant)的Redis記憶體K/V服務,叢集可以使用的功能是普通單機Redis所能使用的功能的一

033.Kubernetes叢集安全-API Server認證授權

一 Kubernetes叢集安全 1.1 安全機制 Kubernetes通過一系列機制來實現叢集的安全控制,其中包括API Server的認證授權、准入控制機制及保護敏感資訊的Secret機制等。叢集的安全性主要有如下目標: 保證容器與其所在宿主機的隔離。 限制容器給基礎設施或其他容器帶來的干擾。 最小許

Restful安全認證權限的解決方案

解決 三方登錄 cati rest oiv 保存 無限 some 一次 一、Restful安全認證常用方式 1.Session+Cookie 傳統的Web認證方式。需要解決會話共享及跨域請求的問題。 2.JWT JSON Web Token。 3.OAuth 支持兩方和三方

Https、OpenSSL自建CA證書簽發證書、nginx單向認證、雙向認證使用Java訪問

1.5 image echo create etc 保存 config openss ima 0.環境 安裝了nginx,安裝了openssl 1.配置和腳本 先創建一個demo目錄(位置自己選擇,我選擇建在nginx的目錄下): mkdir /etc/nginx/

javaspark2.X連接mongodb3.X單機或集群的方法(帶認證不帶認證

連接 通過 ava 更新數據 ati out client data 插入數據 首先,我們明確的是訪問Mongos和訪問單機Mongod並沒有什麽區別。接下來的方法都是既可以訪問mongod又可以訪問Mongos的。 另外,讀作java寫作scala,反正大家都看得懂...

NET Core 2.0使用Cookie認證實現SSO單點登錄

訪問 mvc side mes all add set 1.0 png NET Core 2.0使用Cookie認證實現SSO單點登錄 之前寫了一個使用ASP.NET MVC實現SSO登錄的Demo,https://github.com/bidianqing/SSO.Sam

Spring Cloud雲架構 - SSO單點登錄之OAuth2.0登錄認證(1)

環境 博客 跳轉 baidu pid n) 直接 lan 信息 今天我們對OAuth2.0的整合方式做一下筆記,首先我從網上找了一些關於OAuth2.0的一些基礎知識點,幫助大家回顧一下知識點: 一、oauth中的角色 client:調用資源服務器API的應用 Oauth

Apsara Clouder專項技能認證:實現調用API接口 (筆記)

gpo 分享圖片 alt 技術分享 筆記 .com src div 認證 Apsara Clouder專項技能認證:實現調用API接口 (筆記)

apache用戶認證域名跳轉、訪問日誌

20180529一、apache的用戶認證vim /usr/local/apache/conf/extra/httpd-vhosts.conf //把11.com那個虛擬主機編輯成如下內容<VirtualHost *:80>DocumentRoot "/data/wwwroot/www.

整合spring cloud雲架構 - SSO單點登錄之OAuth2.0登錄認證(1)

spring cloud Spring Boot config 之前寫了很多關於spring cloud的文章,今天我們對OAuth2.0的整合方式做一下筆記,首先我從網上找了一些關於OAuth2.0的一些基礎知識點,幫助大家回顧一下知識點: 一、oauth中的角色client:調用資源服務器AP

SSO單點登錄之OAuth2.0登錄認證(1)

ret fault authorize 雲架構 t權限 通過 方法 架構 不錯 之前寫了很多關於spring cloud的文章,今天我們對OAuth2.0的整合方式做一下筆記,首先我從網上找了一些關於OAuth2.0的一些基礎知識點,幫助大家回顧一下知識點: 一、oauth