摘要:模糊授權,跟上面的認證碼授權類似,不同的是,我們的資源服務器,返回的直接就是準入令牌,而不是認證碼。
本文來自pilishen.com----原文鏈接; 歡迎來和pilishen一起學習php&Laravel;學習群:109256050
OAuth2是一個安全框架,控制著程序受保護部分的準入,主要是控制不同的客戶端如何來調取API,保證它們在請求相應資源的時候有相應的權限。
Laravel Passport是一個強大的Oauth2服務實現,使用Passport往往已經足以應對我們日常API開發中的各種需求,甚至說,大部分時候,我們只是用到了Passport的部分功能而已。也正因為其強大,所以理解和使用起來也有一定難度,而這其中,理解和熟悉oauth2相關的各種授權類型是關鍵,授權類型理解了,Passport也就沒什么難的了。話不多說,一起來看看不同的授權類型都是怎么回事吧。
概念理解: 1. 客戶端(Client)指的是調取你程序API的那個應用,或者說終端,在Passport里創建客戶端可以通過artisan命令來進行
php artisan passport:client
每一個客戶端(client)都要有一個key, name, secret, redirect URI, user(程序創建者/所有者)
2. 資源擁有者(Resource Owner)這個指的是客戶端請求的那個API,其背后所對應資源(或者說數據)的所有者(user)
3. 資源服務器(Resource Server)這個也就是我們的API,可以是不需要讀取權限的公共數據,也可以是需要驗證權限的私有數據。公共數據,或者說公開節點(endpoints),舉個例子就是比如說搜索所有的tweets消息,或者說搜索微信文章,這不需要特別的權限,誰都可以搜。另一方面,假設說以某個用戶的名義去發布(post)一個推特消息,發一個朋友圈,就需要來自這個用戶的權限認證了。
4. 權限范圍(Scope)指的是獲取特定數據,或者進行特定操作的權限(permission),可以在AuthServiceProvider使用Passport::tokensCan()方法來具體定義權限(scope)
Passport::tokensCan([ "read-tweets" => "Read all tweets", "post-tweet" => "Post new tweet", ]);5. 準入令牌(Access token)
當客戶端程序想要取得某些受保護的數據時,就要傳遞一個準入令牌(Access token),以此來驗證當前請求(request)。
授權類型(Grant Type)授權(Grant),說白了就是從資源服務器獲取準入令牌(Access token)的方式,也可以更通俗地說成頒發令牌(token)的方式。一共有五種授權方式,其中四種是用來獲取令牌(Access token)的,另一個是用來刷新、或者說重新創建一個已有令牌(token)的。
1. 認證碼授權(Authorization Code grant)這是最常見的一種類型,說白了就是第三方登陸,也即當第三方的程序想著獲取我們這邊的受保護信息,這個第三方程序必須得獲得我們這邊用戶的認證授權。更直白的,當第三方的客戶端想著調用我們這邊的用戶信息,來登陸他們的網站,那么它得獲得這個用戶的認證授權。
大部分的流行API都會實現這一種授權類型。比如說Facebook,當用戶想著登陸我們的網站,我們可以先把用戶重定向到Facebook,讓他先登陸Facebook,然后Facebook會詢問這個用戶,是否同意我們的這個網站獲取他在Facebook網站上的用戶信息呢?用戶點了授權以后,就又會被重定向回我們的網站,同時呢會附上一條認證碼(Authorization Code),然后呢我們的網站要利用這個認證碼(Authorization Code),再去向Facebook換取準入令牌(access token),有了準入令牌以后,我們才可以進一步獲取該用戶的詳細信息。
這整個過程,又通常被叫做“三條腿的Oauth”(3-Legged OAuth),當然了,還有“兩條腿的Oauth”(2-Legged OAuth),也就是接下來的這一種。
2. 模糊授權(Implicit Grant)Implicit,是模糊、含蓄、不具體指明的意思,這里呢譯作模糊。模糊授權(Implicit Grant),跟上面的認證碼授權(Authorization Code)類似,不同的是,我們的資源服務器,返回的直接就是準入令牌(access token),而不是認證碼(authorization code)。因此呢,就不是需要三步才能獲得token。“三條腿的Oauth”被證明是更好的,可能你會納悶,既然更好,還要這個“兩條腿”的模糊授權(Implicit Grant)干啥?
認證碼(authorization code)授權,需要的是一個服務器向另一個服務器(Facebook)發起請求,獲取認證碼,然后交換準入令牌。但如果我們面前是一個JS的APP,它只是一個瀏覽器端,那么就很難獲取了認證碼再交換準入token了,這種情況下,我們就需要用到這種模糊授權(Implicit Grant)
3. 用戶密碼授權(Resource Owner Password Credentials Grant)Resource Owner == User
這種類型適合于我們信任的客戶端,比如我們自己的手機APP來訪問網站數據,這個時候,客戶端直接使用用戶的登陸密碼信息請求資源服務器,服務器直接返回準入令牌(access token)。
4. 客戶端資質授權(Client Credentials Grant)這個適合于訪問API的這個客戶端,本身就是相應數據的所有者的時候,這期間不涉及到用戶的互動,說白了就是純粹的機器與機器之間的溝通。比如說一個App想著向用戶顯示一個對話框,或者儲存一些跟這個App相關的數據到我們的資源服務器上。
5. 令牌刷新授權(Refresh token grant)當服務器生成一個令牌(token)的時候,同時也會設置一個token的有效期,或者說失效期。令牌刷新授權(Refresh token grant)就是當我們的token過期了,我們得需要將其刷新一下,重新生成一個。這種情況下,驗證服務器會在生成準入token的同時發送一個refresh token(刷新令牌),好后期用來生成一個新的token。需要注意的是,這個流程并不適合于模糊授權(Implicit Grant)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28447.html
摘要:看到社區常有人問用于密碼驗證方式來獲取的問題,剛好我最近一個項目使用,也是使用的密碼授權來做驗證,對于如何做登錄登出,以及多賬號系統的認證等常用場景做一下簡單的使用小總結。 看到Laravel-China社區常有人問Laravel Passport用于密碼驗證方式來獲取Token的問題,剛好我最近一個API項目使用Laravel Dingo Api+Passport,也是使用Oauth...
摘要:本文經授權轉自社區說明發布臨近,大體構建已經完成,文檔整理完成后即可發布。附帶了一個響應式郵件模板,通知類中唯一需要做的就是像下面這樣發送消息錯誤處理是一個可選的擴展包,提供了完整可用的服務。 本文經授權轉自 PHPHub 社區 說明 Laravel 5.3 發布臨近,大體構建已經完成,文檔整理完成后即可發布。 下面是對 Laravel 5.3 新特性的整理,不完整列表。 1、全文搜...
摘要:第一部分安裝第一步使用安裝第二步服務提供器使用框架注冊自己的數據庫遷移目錄,因此在注冊提供器后,就應該運行的遷移命令來自動創建存儲客戶端和令牌的數據表第三步接下來,運行命令來創建生成安全訪問令牌時所需的加密密鑰,同時,這條命令也會創建用于生 第一部分 安裝Passport(laravel/passport) 第一步. 使用 Composer 安裝 Passport :composer...
摘要:最近在寫一個前后端分離項目,本來想用開發的,但是略感笨重,于是想到了的和新出的。更改看守器驅動將配置文件中授權看守器的的選項改為。然后在你的前端請求里需要加入一個參數然后在你需要使用到認證的路由里使用中間件,一切就大功告成啦 最近在寫一個前后端分離項目,本來想用 Jwt-auth + Dingo 開發的,但是略感笨重,于是想到了 Laravel 的 Passport 和 5.5 新出的...
摘要:使用進行測試注冊接口,注冊成功后返回與用戶名登錄接口詳情接口參考了簡書浪來了的認證應用實戰 安裝larave laravel new passport_demo cd passport_demo && composer install 將 .env 中數據庫配置修改為自己的數據庫配置 DB_DATABASE=homestead DB_USERNAME=homestead DB_P...
閱讀 3187·2021-11-23 09:51
閱讀 1524·2021-11-22 09:34
閱讀 2836·2021-10-27 14:15
閱讀 2265·2021-10-12 10:17
閱讀 1884·2021-10-12 10:12
閱讀 946·2021-09-27 14:00
閱讀 1996·2021-09-22 15:19
閱讀 1032·2019-08-30 10:51