㈠ OAuth2.0實現原理
OAuth2.0是一個授權框架,他信盯規定了客戶從授權伺服器獲取令牌Token的規則。
要理解OAuth2.0,先要知道為什麼會有這個東西產生,或者說他能幫我們解決什麼問題,其實簡單說他就是幫我們解決了訪問安全問題。先看如下的一張圖:
圖片顯示了我們沒有引入任何安全機制情況下的資源訪問過程,可以看到正常的用戶和惡意的用戶都可以通過向資源伺服器的介面發送請求獲得用戶數據。顯然惡意用戶不該獲取數據,他是非法獲得,這個情況不應該被允許,需要一種機制保護用戶數據。
OAuth2.0包含了資源擁有者,授權伺服器,客戶應用,授權伺服器,資源伺服器。
客戶應用: 通常是一個 WebWeb 或者無線應用,它需要訪問用戶的。
資源伺服器: 是一個 webweb 站點 或者 web service web service web service web service API ,用戶的受保護。
授權伺服器: 在客戶應用成功認證並獲得授權之後,向客戶應用頒發訪問令牌Access Token。
資源擁有者: 資源的擁有人,想要分享某些資源給第三方應用。
1)授權碼(Authorization Code Token),僅用於授權碼授權類型,用於交換獲取訪問令牌和刷新令牌
2)刷新令牌(Refresh Token),用於去授權伺服器獲取一個新的訪問令牌
3)訪問令牌(Access Token),這是OAuth令牌類型中最核心的一個,用於代表一個用戶或服務直接去訪問受保護的資源
4)Bearer Token,不管誰拿到Token都可以訪岩坦運問資源,像現鈔
5)Proof of Possession(PoP) Token,可以校驗client是否對Token有明確的擁有權
上面提到了需要提供一種機制來保護數據,OAuth2.0提粗梁供的就是一種授權機制,就是說用戶要訪問資源必須先通過授權伺服器授權拿到Access Token(訪問授權),他拿著這個Access Token才能去資源伺服器去要他想要的數據,示意圖如下:
這里看到我們引入了一個授權伺服器,這個授權伺服器就是專門負責頒發Access Token的,客戶應用需要從授權伺服器中獲得Access Token,獲得後再向資源伺服器去獲取數據,請求中包含了Token一起發到資源伺服器,資源伺服器首先要驗證這個Token是否合法,如果合法再返回數據給客戶應用。
上圖中紅色圈圈圈起來的就是OAuth2.0框架協議工作的地方,他規定了客戶應用如何獲取Access Token,以及如何使用Token的整個過程。
其中核心的授權伺服器包括了授權端點,令牌端點,校驗端點,注銷端點,如下圖所示:
OAuth2.0中規定了多種授權模式,各種模式實現的復雜程度和安全系數不一樣,我們先分別看一下四種授權模式:
1)授權碼(Authrization Code)模式:
基本流程是先通過前端渠道客戶獲取授權碼,然後通過後端渠道,客戶使用Authrization Code去交換Access Token和可選的Refresh Token,這種模式是最安全的模式,因為令牌不會通過user-agent去傳遞,完整的過程如下圖:
授權碼模式的優點是比較安全,他可以有token過期時間,而且上面的第四和第五步都是在伺服器之間的訪問,很難被截獲,用戶信息也存在服務端,這樣就保證了他的安全性。他的缺點是需要進行多次請求才能訪問到資源。
授權碼模式假定資源擁有者和客戶不在一台設備上,他擁有高安全性的保障,目前市面上主流的第三方認證都是採用這種模式。
2)隱式/簡化(Implicit)模式
基本流程是Access Token直接通過前端渠道從授權伺服器返回,完整的過程如下圖:
3)密碼(Resource Owner Password)模式
基本流程是使用用戶名/密碼作為授權方式從授權伺服器上獲取Access Token,而且一般不支持refresh token,完整的過程如下圖:
4)客戶端(Client)模式
基本流程是通過後端渠道去獲取一個Access Token,因為客戶憑證可以使用對稱或者非對稱加密,該方式支持共享密碼和證書,完整的過程如下圖:
客戶端模式適合用作伺服器間通信場景。
授權碼模式有一個基本的選擇流程,如下圖:
㈡ 360oauth token是什麼意思
就是先通過第三方系統才可以登陸。OAuth的解釋就是對第三方應用的授權機制,使其獲取用戶的數據。數據所有者收到第三方請求授權後,桐襪高告局尺好跡訴系統通過第三方應用的請求,系統就會自動生成一個令牌(token),用來替代密碼,供第三方應用使用。
允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。OAuth 2.0是OAuth 1.0的後一個版本,2012年10月,OAuth 2.0協議正式發布為RFC 6749。
系統工程:
實現系統最優化的科學。1957年前後正式定名,1960年左右形成體系。這是一門高度綜合性的管理工程技術,涉及應用數學(如最優化方法、概率論、網路理論等)、基礎理論(如資訊理論、控制論、可靠性理論等)、系統技術(如系統模擬、通信系統等)以及經濟學、管理學、社會學、心理學等各種學科。
系統工程的主要任務是根據總體協調的需要 ,把自然科學和社會科學中的基礎思想、理論、策略、方法等從橫的方面聯系起來,應用現代數學和電子計算機等工具 ,對系統的構成要素、組織結構、信息交換和自動控制等功能進行分析研究,藉以達到最優化設計,最優控制和最優管理的目標。
㈢ 哪位大神能講下OAuth2.0 token生成演算法
1、HMACSHA1的概念
HMACSHA1 是
從 SHA1 哈希函數構造的一種鍵控哈希演算法,被用作 HMAC(基於哈希的消息驗證代碼)。此 HMAC
進程將密鑰與消息數據混合,使用哈希函數對混合結果進行哈希計算,將所得哈希值與該密鑰混合,然後再次應用哈希函數。輸出的哈希值長度為 160
位,可以轉換為指定位數。
上面是微軟的標準定義,我看了也沒太明白,他的作用一句話來理解:就是確認請求的URL或者參數是否存在被篡改,以QQ
簽名為例:發送方(自己)將參數等進行HMAC演算法計算,將得到的哈希值(即簽名值)與請求的參數一同提交至接收方(QQ端),然後接收方再次將參數等值
進行HMAC演算法計算,將得到的哈希值與你傳遞過來的哈希值進行核對驗證,若一樣,說明請求正確、驗證通過,進行一下步工作,若不一樣,將返回錯誤。
(下面說的夠詳細了吧,還不理解,留言給我)
2、QQ OAuth 1.0中用到的哈希演算法
/// <summary>
/// HMACSHA1演算法加密並返回ToBase64String
/// </summary>
/// <param name="strText">簽名參數字元串</param>
/// <param name="strKey">密鑰參數</param>
/// <returns>返回一個簽名值(即哈希值)</returns>
public static string ToBase64hmac(string strText, string strKey)
{
HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.UTF8.GetBytes(strKey));
byte[] byteText = myHMACSHA1.ComputeHash(Encoding.UTF8.GetBytes(strText));
return System.Convert.ToBase64String(byteText);
}
或者寫成,原理一樣:
public static string HMACSHA1Text(string EncryptText, string EncryptKey)
{
//HMACSHA1加密
string message;
string key;
message = EncryptText;
key = EncryptKey;
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(key);
HMACSHA1 hmacsha1 = new HMACSHA1(keyByte);
byte[] messageBytes = encoding.GetBytes(message);
byte[] hashmessage = hmacsha1.ComputeHash(messageBytes);
return ByteToString(hashmessage);
}
前面都注釋了參數含義,就不再說明了。COPY就可使用
註明:頁面請引用
using System.Security.Cryptography;
3、介紹另外一種HMACSHA1演算法的寫法
public static string HMACSHA1Text(string EncryptText, string EncryptKey)
{
//HMACSHA1加密
HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = System.Text.Encoding.UTF8.GetBytes(EncryptKey);
byte[] dataBuffer = System.Text.Encoding.UTF8.GetBytes(EncryptText);
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);
return Convert.ToBase64String(hashBytes);
}
㈣ okhttp3 oauth怎樣獲取token
騰訊用的是1.0變種的oauth協議, oauth的核心思想就在於用戶授權的那一步, 沒有用戶的頁面操作, 不可能完成oauth流程的。 沒有授權, request_token就是未授權狀態, 不會有verifier, 更不會產生access_token。
所以蘆顫叢結論:沒有人的參與, 不可能完成oauth流程。 只有一種條件下可洞胡以定時做, 那就是用戶必須至少授權一次,你擁有用戶的access_token並且token不過期。即陪櫻使這樣, 你還是要調用對方的授權頁,只是對方受權頁會視情況自動callback回來而已。