天天看點

Oauth2.0 用Spring-security-oauth2

OAuth2提供商sparklr2和OAuth 2用戶端TONR 。我探索在網際網路上了一下,整理相關文檔。編譯并運作了OAuth2提供商sparklr2和OAuth2用戶端TONR,并檢查所有的授權上。現在,我在這裡從實用的角度講解的OAuth2.0的不同方面來了解Spring-security-Oauth2.0。

這篇文章是試圖描述的OAuth2.0以簡化的形式來幫助開發商和服務提供商實施的協定。

我将涵蓋以下主題在這篇文章中。

1 。實體

2 。建立應用程式

3。授權,Grant-Type

                  a.Web伺服器應用程式(WebServer)

                  b.基于浏覽器的應用程式(WebClient)

                  c.手機應用程式(MobileAPP)

                  d.其它桌面應用程式

4 。通路資源

5。資源

OAuth2.0流程:

Oauth2.0 用Spring-security-oauth2

OAuth的伺服器:

這也被稱為OAuth的提供者。它的整體責任是驗證和授權的使用者/用戶端和管理令牌。

第三方應用:

第三方應用程式俗稱為用戶端,将嘗試獲得通路使用者的帳戶。它需要從使用者獲得許可,才可以這樣做。這可能是一個基于Web伺服器的應用程式,基于浏覽器的應用程式,桌面應用程式,手機/平闆電腦應用程式或一些智能裝置,如谷歌護目鏡和智能電視。

資源伺服器:

俗稱為資源伺服器的API,從其中的資料會被提取出來或送達。這可能是SOAP或REST的基礎服務提供商。

使用者:

使用者俗稱為資源擁有者,誰可以通路通路資源。

建立應用程式:

在您開始OAuth的過程中,您必須先注冊一個新的應用與服務/供應商。當注冊一個新的應用程式,你通常注冊基本資訊,如應用程式克林特ID,秘密,授權發放,類型等,另外,你必須注冊一個重定向URI,用于将使用者重定向到Web伺服器,基于浏覽器的,或移動應用程式。

重定向的URI:

該服務将隻将使用者重定向到注冊的URI,這有助于防止某些攻擊。任何HTTP重定向的URI必須與SSL安全保護,是以該服務将隻重定向到的URI以“https”開頭。這可以防止從令牌在授權過程中被截獲。

用戶端ID和授權密碼:

注冊您的應用程式後,你将擁有你的用戶端ID和用戶端授權密碼。該用戶端ID被認為是公共資訊,并用于建立登入網址,或包括在一個頁面上的Javascript源代碼。用戶端授權密碼必須保密。如果部署的應用程式不能保守授權密碼的機密,如JavaScript或本機應用程式,那麼這個授權密碼不被使用。

授權方式:

的OAuth2的第一步驟是從使用者獲得授權。對于基于浏覽器或移動應用程式,這通常是由顯示給使用者提供的服務的接口來實作的。

OAuth的2提供了不同的用例數批類型。定義的補助類型有:

 一個Web伺服器上運作的應用程式授權碼

 隐含的基于浏覽器的或移動應用程式

 密碼與使用者名和密碼登入

 對于應用程式通路用戶端憑據

Web伺服器應用程式

Web應用程式都寫在一個伺服器端語言和運作伺服器的應用程式的源代碼是不提供給公衆。

授權請求:

http://localhost:8080/oauth2/oauth/authorize?response_type=code&client_id=easylocate&scope=read&redirect_uri=http://localhost:8080/web

之後接受通路。該頁面将被重定向到重定向URI的授權碼。

http://localhost:8080/web/?code=t7ol7D

現在是時候來交換授權碼來獲得通路令牌。

http://localhost:8080/oauth2/oauth/token?grant_type=authorization_code&code=t7ol7D&redirect_uri=http://localhost:8080/web&client_id=easylocate&client_secret=secret

與通路令牌的OAuth的伺服器回複

 {

  “ACCESS_TOKEN ”:“ 372c3458 - 4067 - 4b0b - 8b77 - 7930f660d990”

  “token_type ” : “bearer” ,

  “refresh_token ” : “ ce23c924 - 3f28 - 456C - A112 - b5d02162f10c”

  “expires_in ” : 37364 ,

  “scope” :“read”

}

萬一錯了授權碼,的Oauth伺服器回複的錯誤。

 {

  “error” :“ invalid_grant ” ,

  “ error_description ” : “無效的授權碼: t7olD”

}

安全性:需要注意的是該服務應要求應用程式進行預注冊的重定向的URI。否則将有一個錯配。

基于浏覽器的應用程式和移動應用程式:

基于浏覽器的應用程式在浏覽器從網頁加載的源代碼之後運作完全。由于整個源代碼是提供給浏覽器,他們不能保持其用戶端秘密的保密性,是以這個秘密是不是在這種情況下使用。

授權請求:

http://localhost:8080/oauth2/oauth/authorize?response_type=token&client_id=easylocate&redirect_uri=http://localhost:8080/web&scope=read

之後接受通路。該頁面将被重定向到重定向URI與令牌。

http://localhost:8080/web/#access_token=372c3458-4067-4b0b-8b77-7930f660d990&token_type=bearer&expires_in=37026

就是這樣,沒有其他的步驟!在這一點上,一些JavaScript代碼可以(在#後的部分)拉出通路令牌的片段,并開始進行API請求。

如果出現錯誤,你反而會收到一條錯誤的URI片段,如:

http://localhost:8080/web/#error=invalid_scope&error_description=Invalid+scope:+rea&scope=read+write

基于密碼:

OAuth的2還提供了可用于令牌直接交換一個使用者名和密碼通路密碼傳遞式。因為這顯然需要的應用程式來收集使用者的密碼,它應該隻用于由服務自身建立的應用程式。例如,原生Twitter的應用程式可以使用這筆款項型移動或桌面應用程式登入。

使用密碼傳遞式,隻是讓類似下面的POST請求。我現在用的卷曲工具來示範POST請求。您可以使用任何其餘用戶端。

卷曲-I-X POST -D “的client_id = easylocate & grant_type=密碼和使用者名admin和密碼=管理者& CLIENT_SECRET =秘密”http://localhost:8080/oauth2/oauth/token

伺服器将傳回與令牌

{

  “ACCESS_TOKEN ”:“ 4e56e9ec - 2f8e - 46b4 - 88b1 - 5d06847909ad”

 “token_type ” : “bearer”,

  “refresh_token ”:“ 7e14c979 - 7039 - 49d0 - 9c5d - 854efe7f5b38”

  “expires_in ” : 36133 ,

  “scope” :“read,write"

}

用戶端憑據基于:

基于用戶端credentals授權用于伺服器到伺服器應用程式的通路。我隻是表示使用卷曲工具的POST請求。

卷曲-I-X POST -D “的client_id = easylocate & grant_type =client_credentials & CLIENT_SECRET =秘密”http://localhost:8080/oauth2/oauth/token

伺服器會回來的通路令牌

 {

  “ACCESS_TOKEN ”:“ 9cd23bef - ae56 - 46b0 - 82f5 - b9a8f78da569”

  “token_type ” : “bearer”,

  “expires_in ” : 43199 ,

  “scope” :“read”

}

通路的資源:

一旦您通過驗證并獲得通路令牌,可以提供通路令牌來通路受保護的資源

繼續閱讀