OAuth2.0這個名詞你是否在項目中時常聽到呢?是否以爲好像懂,又好像不太懂呢?前端
最近一直想寫篇關於OAuth2.0的東西,記錄下個人學習與感悟,然各類理由的拖延,直到今日才靜下心來寫下這篇博客。固然,這裏僅表明我的理解,若有紕漏之處,望園內大佬們不吝賜教~安全
好了,話很少說,乾貨頂上。服務器
在接觸OAuth2.0時是否常聽到認證和受權這兩個名詞呢?學習
剛接觸時,一直覺得這兩個詞是一個意思,只是你們說法的不一樣而已。然,在看完官方開發文檔後才知道,這根本就是兩個東西,不能混爲一談。下面詳細說說:加密
如今看看,是否是挺簡單的概念,頓時清晰起來?spa
訪問令牌,其實就是能夠訪問受保護資源的一個憑證。通常而言,這是串加密過的字符串,頒發給客戶端,用於替換用戶名和密碼,避免每次請求都攜帶用戶名密碼,增長安全風險。代理
上面這張圖即是OAuth 2.0抽象的協議流程,描述了其定義的四個角色之間的交互關係。我將這個流程分爲了前期準備和獲取資源兩個部分,詳細以下:blog
前期準備(這是一次性操做,可經過界面申請,與資源擁有者的用戶代理溝通等):token
獲取資源(Restful請求,每次訪問資源都得通過該操做):ip
受權成功其實就是資源擁有者頒發的能夠訪問受保護資源的憑證。固然客戶端直接拿着憑證是沒法訪問資源的,還需拿着這個憑證去受權服務器拿訪問令牌,憑着令牌即可直接訪問受保護資源。
OAuth 2.0官方給出的規範,受權的具體方式共有四種(可自定義):資源擁有者密碼憑證,客戶端憑證,受權碼和隱式受權,;固然自定義機制也是支持的。
資源擁有者密碼憑證的受權方式僅適用於資源擁有者和客戶端高度信任的場景。
客戶端攜帶自身憑證(clientId: secret)直接去受權服務器獲取訪問令牌
一次性操做(受權碼只須要獲取一次便可):
獲取資源:
優點:對客戶端進行認證;訪問令牌沒有直接返回至客戶端,因此沒有經歷第三方(用戶代理),減小暴露令牌的可能。
隱士受權是個簡化的受權流程,適用於前端頁面由腳本語言(如Javascript)編寫的場景,對於React,Angular等編寫的前端,建議使用受權碼的受權方式。
注意:通常隱式受權,能夠利用重定向URI進行客戶端認證。
做者:吳家二少
博客地址:https://www.cnblogs.com/cloudman-open/
本文歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接