轉自:http://www.cftea.com/c/2016/11/6704.asp
- OAuth 白話簡明教程 1.簡述
- OAuth 白話簡明教程 2.授權碼模式(Authorization Code)
- OAuth 白話簡明教程 3.客戶端模式(Client Credentials)
- OAuth 白話簡明教程 4.刷新 Access Token
- OAuth 白話簡明教程 5.其他模式
客戶端模式(Client Credentials),客戶端授權模式。
客戶端模式,在我看來,並不是 OAuth 的初衷。客戶端模式要解決什么樣的問題呢?
舉例:有一個服務商提供了很多資源,天氣、股票、火車時刻……如果這個服務商大方點,人人都可以抓取這些資源,也簡單了,可是這個服務商要采用認證機制,只有認證了的第三方應用才可以使用這些資源。
所以這個服務商做了一個授權服務器,第三方應用紛紛在這上面注冊,拿到了各自的 app_id、app_secret。按理說第三方應用在取天氣時把 app_id、app_secret 傳給天氣服務器,然后天氣服務器向授權服務器驗證 app_id、app_secret,驗證成功就返回天氣,也能實現需求。
但是,這太簡單了,怎么能夠對得起人家高大上的平台呢?人家要整就要過度設計,簡單問題就要復雜化。所以有了 OAuth 的客戶端模式。
string url =
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + HttpUtility.UrlEncode(_appid) +
"&secret=" + HttpUtility.UrlEncode(_appSecret);
WebClient wc = new WebClient();
string jsonString = wc.DownloadString(url);
WebClient wc = new WebClient();
string jsonString = wc.DownloadString(url);
上面是微信獲取 access_token 的 C# 代碼,非常簡單就拿到了。
- 第一行,構建 URL,傳入 app_id 和 app_secret。
- 第二行、第三行,用 WebClient 獲取返回結果。
- 然后就解析這個 JSON 字符串吧,就取到 access_token 了,相關技術:C# 中處理 JSON。
- 最后就憑這個 access_token 去使用資源服務器的服務吧。(並不是直接憑 app_id、app_secret 去使用資源服務器的服務的,中間隔了個 access_token,這就是我前面說的簡單問題復雜化,當然大平台考慮更細的安全性,復雜化還是有必要的。)
發現沒,到這里都在提第三方應用、授權服務器、資源服務器(上面提到的天氣服務器就是一個資源服務器),並沒有提用戶,這就是 OAuth 的客戶端模式。
可以看出客戶端模式完全就是授權碼模式的下半部分,也就是省去用戶登錄嘛,其他大同小異。
所以,不作介紹了,反正說得再詳細,各大公司也不一定是完全遵照這個來的。
