laravel passport OAuth2.0的4種模式

參考:
https://xueyuanjun.com/post/1...javascript

熟悉的場景

某個網站,某用戶未註冊,註冊時提示可微信帳號登陸(github, google都有相似)

某網站是第三方(客戶端), 認證服務器和資源服務器都在微信,資源是指微信的用戶名,頭像等java

網站目的是獲取改用戶微信的帳戶,頭像等,方便快速註冊. 前提須要用戶受權贊成.laravel

20191021160036.png

laravel用passport搭建OAuth2認證服務

至關於基於laravel搭建OAuth2 Server.git

資源擁有者: laravel server
OAuth2 認證服務器: laravel server
用戶: 在laravel server註冊過的用戶
第三方: 經過api訪問的Web端,目的就是要拿到access_token
  1. 準備

見文檔:https://xueyuanjun.com/post/1...github

  1. 4種模式

記得用artisan passport:client添加對應用戶後端

對應不一樣應用場景:api

20191021200825.png

受權碼模式(authorization_code)

實現相似微信受權登陸的服務.這個固然是最強大也最複雜的.服務器

  1. 用戶點擊客戶端微信登陸按鈕,url跳轉到微信的登陸頁面, (好比微信登陸)

20191022002711.png

  1. 用戶登陸微信, 微信提示是否容許受權.

實際是訪問認證服務器的/oauth/authorize.微信

20191022002919.png

  1. 容許,redirect到 客戶端指定的redirect_uri

重定向uri由第三方在步驟1裏指定.cookie

後端沒法控制具體重定向的url實現,(每一個第三方都不同)只能經過url添加返回參數code.

第三方服務的後端處理該重定向,再次發起訪問/oauth/token,拿到真正的token

20191022003721.png

隱式受權

和code受權的惟一區別是返回的redirect_uri沒有code參數:

http://dev.blog.com:8000/oauth/authorize?client_id=6&response_type=code&scope=&state=SENPYyXJvT0fl4Rnz0Ag&redirect_uri=http%3A%2F%2Fdev.blog.com%3A8000%2Fauth%2Fcallback

密碼受權模式(password_credentials)

適用移動端.

無認證過程,客戶端登陸時直接帶上資源服務器註冊過的帳號密碼,就像使用同一個帳戶系統.

客戶端模式(client_credentials)

相似微信等開放平臺的認證方式.開發者註冊後拿到clientid, client_secret,而後認證去拿token直接用

比密碼受權更簡單,無需用戶名密碼,直接用client_id + client_secret.

javascript api

適用spa,不用也行..畢竟還要提交表單登陸.

省掉js api 帶上Bearer Token +xxx的認證,直接放到cookie裏.

需添加middleware:\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class

這個 Passport 中間件將會附加 laravel_token Cookie 到輸出響應,這個 Cookie 包含加密過的JWT,Passport 將使用這個 JWT 來認證來自 JavaScript 應用的 API 請求,如今,你能夠發送請求到應用的 API,而沒必要顯示傳遞訪問令牌.

其餘用法

1 私人令牌
    受權方式在用戶測試、體驗平臺提供的認證 API 接口時很是方便
2 scope做用域 
    更細顆粒度控制api權限
相關文章
相關標籤/搜索