http authorization 基本認證
http協議是無狀態的, 瀏覽器和web伺服器之間可以通過cookie來身份識別。 桌面應用程式(比如新浪桌面客戶端, skydrive客戶端)跟Web伺服器之間是如何身份識別呢?
什麼是HTTP基本認證
桌面應用程式也通過HTTP協議跟Web伺服器互動, 桌面應用程式一般不會使用cookie
, 而是把 "使用者名稱+冒號+密碼"用BASE64
演算法加密後的字串放在http request
中的header Authorization
中傳送給服務端, 這種方式叫HTTP基本認證(Basic Authentication
)
當瀏覽器訪問使用基本認證的網站的時候, 瀏覽器會提示你輸入使用者名稱和密碼,如下圖
假如使用者名稱密碼錯誤的話, 伺服器會返回401
如下圖
HTTP基本認證的過程
第一步: 客戶端傳送http request
給伺服器,
第二步: 因為request
中沒有包含Authorization header
, 伺服器會返回一個401 Unauthozied
給客戶端,並且在Response
的 header "WWW-Authenticate"
中新增資訊。
第三步:客戶端把使用者名稱和密碼用BASE64
加密後,放在Authorization header
中傳送給伺服器, 認證成功。
第四步:伺服器將Authorization header
中的使用者名稱密碼取出,進行驗證, 如果驗證通過,將根據請求,傳送資源給客戶端
使用Fiddler Inspectors
下的Auth
選項卡,可以很方便的看到使用者名稱和密碼:
HTTP基本認證的優點
HTTP基本認證,簡單明瞭。Rest API 就是經常使用基本認證的。
每次都要進行認證
http協議是無狀態的, 同一個客戶端對 伺服器的每個請求都要求認證。
HTTP基本認證和HTTPS
把 “使用者名稱+冒號+密碼” 用BASE64
加密後的string
雖然用肉眼看不出來, 但用程式很容易解密,上圖可以看到Fiddler
就直接給解密了。 所以這樣的http request
在網路上,如果用HTTP
傳輸是很不安全的。 一般都是會用HTTPS
傳輸,HTTPS
是加密的,所以比較安全。
HTTP OAuth認證
OAuth對於Http來說,就是放在Authorization header中的不是使用者名稱密碼, 而是一個token。
微軟的Skydrive 就是使用這樣的方式, 如下圖:
其他認證
除了基本認證(Basic Authentication), 還有摘要認證digest authentication, WSSE(WS-Security)認證
客戶端的使用
客戶端如果要跟“使用基本認證的網站”互動。 非常很簡單,把使用者名稱密碼加在Authorization header
中就可以了。
string url = "https://testsite";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
NetworkCredential nc = new NetworkCredential("username", "password");
req.Credentials = nc;
Linux下的curl
curl -u username:password https://testsite/
//js的用法
//把登入的資訊放在這個裡面
$.cookie(kp.key_c_uid, 1, {expires: 1});
$.cookie(kp.key_c_auth, "Basic " + btoa(1+":"+"oyH1Vwk4vPXgub6UkxAr3wvmfD18"));
//調介面的時候在方法前設定header資訊
beforeSend: function (xhr) {
if (authorization) {
xhr.setRequestHeader("Authorization", authorization);
}
},
var authorization = $.cookie(kp.key_c_auth);
相關文章
- Http基本認證HTTP
- 【Http基本認證】HTTP
- HTTP認證之基本認證——Basic(一)HTTP
- HTTP認證之基本認證——Basic(二)HTTP
- 為ElasticSearch新增HTTP基本認證ElasticsearchHTTP
- 授權(Authorization)和認證(Authentication)
- HTTP認證之摘要認證——Digest(一)HTTP
- cas認證基本流程
- HTTP權威指南學習-第12章 基本認證機制HTTP
- Hyperf 下 http 認證元件HTTP元件
- 為 Eureka 新增 Http Basic 認證HTTP
- HTTP認證模式:Basic & DigestHTTP模式
- HTTP基礎認證Basic AuthenticationHTTP
- PHP的HTTP認證機制PHPHTTP
- Docker Register部署與基本認證Docker
- 【原創】Apache HTTP Server認證初探ApacheHTTPServer
- python-http請求帶AuthorizationPythonHTTP
- PHP介面HTTP安全認證之Basic模式PHPHTTP模式
- 各種程式語言忽略http的SSL證書認證HTTP
- EMQX_AUTH_HTTP 認證外掛使用指南MQHTTP
- HTTP使用BASIC認證的原理及實現方法HTTP
- Django 使用者認證系統:基本設定Django
- 轉:使用基本認證從WebServer獲取資料WebServer
- EMQX 登入認證,通過外部自建HTTP服務控制MQHTTP
- python-Django基本流程原理02-認證系統PythonDjango
- 精講RestTemplate第9篇-如何通過HTTP Basic Auth認證RESTHTTP
- 使用Node在服務端呼叫HTTP-Basic認證的API服務端HTTPAPI
- Oracle中兩種認證方式:OS認證與口令檔案認證Oracle
- 認證授權方案之JwtBearer認證JWT
- Laravel 認證原理及完全自定義認證Laravel
- 網路身份認證——Kerberos配置及認證ROS
- MQTT 基本認知MQQT
- 【Azure API 管理】解決呼叫REST API操作APIM(API Management)需要認證問題(Authentication failed, The 'Authorization' header is missing)APIRESTAIHeader
- 增強版實名認證介面-Java身份證實名認證介面程式碼-身份認證Java
- Passport 認證Passport
- Authorization ObjectObject
- WCF傳輸安全(TransferSecurity)的基本概念和原理:認證(Authentication)[上篇]
- 用Django和mod_wsgi設定SVN基本的授權認證Django