本文准備用最簡單的語言告訴大家什么是OAuth2 ,OAuth2是干什么的。
我們有一個資源服務器,資源服務器中有一系列的用戶數據。
現在有一個應用想想要獲取我們的用戶數據。
那么最簡單的方法就是我們開發一個API。
可是某天來了個惡意應用,或者是我們不想給它數據的應用,我們就會造成數據的泄漏。
所以我們就需要對第三方的應用進行校驗,比如最原始的方法是使用IP地址,如果是不認識的IP地址就不給他資源。
可是這種方案有兩個嚴重的缺點:
1、當客戶應用換了IP地址之后,我們也要同時維護更換IP地址。
2、當客戶應用是分布式部署很多份的時候,我們就要為同一個用戶維護很多份IP地址。
3、ip是可以偽裝的。
這樣無疑是繁瑣麻煩、難以維護的。
所以一般業界的解決方案是給予客戶應用一個“出入證”——專業稱為訪問令牌(Access Token)。如果來訪問的客戶應用帶有合法的訪問令牌,則可以給他數據,否則便拒絕。
那么Access Token哪里來的呢?我們一般是由一個授權服務器頒發的。每個允許其訪問資源的客戶應用都現在我們的系統中注冊一個appkey,然后每次用這個appkey向我們的授權服務器申請Access Token。這樣不論客戶應用換不換ip、有多少ip,只要客戶應用的appkey是唯一不變的就不用做任何修改,也不用擔心ip偽裝的問題。
到此為止我們其實還面臨着一個問題,那就是當我們獲取用戶數據的時候,雖然我們允許第三方的客戶應用獲取用戶數據,用戶本人卻不一定允許。比如,用戶在我們系統里存儲了圖片、文檔、視頻等數據,用戶只允許第三方應用獲取他的文檔,而不允許第三方應用獲取他的圖片和視頻。所以在我們頒發給客戶應用相關權限的Access Token的時候,需要經過用戶的同意。
OAuth2.0本質上就是將這里的客戶應用向授權服務器請求令牌與授權服務器頒發令牌的過程標准化了,根據這樣一套標准與解決方案,我們就可以安全的讓第三方應用訪問存儲在我們服務器上的用戶數據了。