OAuth2標准為了應對不同的場景,設計了四種不同的標准模式。
1、授權碼模式

授權碼模式是四種模式中最繁瑣也是最安全的一種模式。
client向資源服務器請求資源,被重定向到授權服務器(AuthorizationServer)
瀏覽器向資源擁有者索要授權,之后將用戶授權發送給授權服務器
授權服務器將授權碼(AuthorizationCode)轉經瀏覽器發送給client
client拿着授權碼向授權服務器索要訪問令牌
授權服務器返回Access Token和Refresh Token給cilent
這種模式是四種模式中最安全的一種模式。一般用於client是Web服務器端應用或第三方的原生App調用資源服務的時候。因為在這種模式中AccessToken不會經過瀏覽器或移動端的App,而是直接從服務端去交換,這樣就最大限度的減小了AccessToken泄漏的風險。
2、簡化模式

簡化模式相對於授權碼模式省略了,提供授權碼,然后通過服務端發送授權碼換取AccessToken的過程。
client請求資源被瀏覽器轉發至授權服務器
瀏覽器向資源擁有者索要授權,之后將用戶授權發送給授權服務器
授權服務器將AccessToken以Hash的形式存放在重定向uri的fargment中發送給瀏覽器
瀏覽器訪問重定向URI
資源服務器返回一個腳本,用以解析Hash中的AccessToken
瀏覽器將Access Token解析出來
將解析出的Access Token發送給client
一般簡化模式用於沒有服務器端的第三方單頁面應用,因為沒有服務器端就無法使用授權碼模式。
3、密碼模式
密碼模式是用戶直接將自己的用戶名密碼交給client,client用用戶的用戶名密碼直接換取AccessToken。

用戶將認證密碼發送給client
client拿着用戶的密碼向授權服務器請求Access Token
授權服務器將Access Token和Refresh Token發送給client
這種模式十分簡單,但是卻意味着直接將用戶敏感信息泄漏給了client,因此這就說明這種模式只能用於client是我們自己開發的情況下。因此密碼模式一般用於我們自己開發的,第一方原生App或第一方單頁面應用。
4、客戶端模式
這是一種最簡單的模式,只要client請求,我們就將AccessToken發送給它。
client向授權服務器發送自己的身份信息,並請求AccessToken
確認client信息無誤后,將AccessToken發送給client
這種模式是最方便但最不安全的模式。因此這就要求我們對client完全的信任,而client本身也是安全的。因此這種模式一般用來提供給我們完全信任的服務器端服務。在這個過程中不需要用戶的參與。
我們來總結一下四種模式的應用場景:
1、授權碼模式:第三方Web服務器端應用與第三方原生App
2、簡化模式:第三方單頁面應用
3、密碼模式:第一方單頁應用與第一方原生App
4、客戶端模式:沒有用戶參與的,完全信任的服務器端服務