OAuth 2 0 Server PHP實現示例

2022-04-18 05:21:13 字數 4166 閱讀 2551

需求

實現三方oauth2.0授權登入

使用oauth服務

oauth 2.0 server php

環境nginx

mysql

php框架

yii一 安裝

專案目錄下安裝應用
composer.phar require bshaffer/oauth2-server-php "^1.10"

二 構建資料結構

注意 user表需要自定義

create table oauth_clients (

client_id varchar(80) not null,

client_secret varchar(80),

redirect_uri varchar(2000),

grant_types varchar(80),

scope varchar(4000),

user_id varchar(80),

primary key (client_id)

);create table oauth_access_tokens (

access_token varchar(40) not null,

client_id varchar(80) not null,

user_id varchar(80),

expires timestamp not null,

scope varchar(4000),

primary key (access_token)

);create table oauth_authorization_codes (

authorization_code varchar(40) not null,

client_id varchar(80) not null,

user_id varchar(80),

redirect_uri varchar(2000),

expires timestamp not null,

scope varchar(4000),

id_token varchar(1000),

primary key (authorization_code)

);create table oauth_refresh_tokens (

refresh_token varchar(40) not null,

client_id varchar(80) not null,

user_id varchar(80),

expires timestamp not null,

scope varchar(4000),

primary key (refresh_token)

);create table oauth_users (

username varchar(80),

password varchar(80),

first_name varchar(80),

last_name varchar(80),

email varchar(80),

email_verified boolean,

scope varchar(4000),

primary key (username)

);create table oauth_scopes (

scope varchar(80) not null,

is_default boolean,

primary key (scope)

);create table oauth_jwt (

client_id varchar(80) not null,

subject varchar(80),

public_key varchar(2000) not null

);

三 **實現

<?php

/** * created by phpstorm.

* user: parker

* date: 2020/9/8

* time: 7:08 下午

* * 使用 oauth 2.0 server php 搭建三方授權服務

* 本服務使用 授權碼形式

* 授權碼(authorization code)方式,指的是第三方應用先申請乙個授權碼,然後再用該碼獲取令牌。

* 這種方式是最常用的流程,安全性也最高,它適用於那些有後端的 web 應用。授權碼通過前端傳送,令牌則是儲存在後端,而且所有與資源伺服器的通訊都在後端完成。這樣的前後端分離,可以避免令牌洩漏。

* */

namespace backend\controllers\api;

use common\lib\lcontroller;

use common\lib\lerror;

use common\models\admin\adminmodel;

use oauth2\granttype\authorizationcode;

use oauth2\request;

use oauth2\response;

use oauth2\server;

use oauth2\storage\pdo;

use yii\helpers\json;

use yii;

class oauthcontroller extends lcontroller

/*** 獲取授權碼(測試使用生產環境服務新增到登入介面)

** 獲取鏈結

* get

* response_type 必填 請求型別

* client_id 必填 三方授權id

* state 必填 **驗證字段

** 響應方式為跳轉到src_oauth_clients表對應id條目設定的redirect_url跳轉連線返回第三方應用, 並且攜帶code

* 示例:對應的redirect_url為 那麼對應的跳轉連線為(state未使用)

* ?code=d53d363349951c29593b722a7d2fb05c054f5e65&state=xyz**/

public function actiongetcode()

else

}/**

* 獲取access_toke

* 獲取鏈結

* post

* data

* grant_type 必填 請求型別 authorization_code

* client_id 必填 三方授權id

* client_secret 必填 三方授權秘鑰

* code 必填 上一步獲取的授權碼

** return**

*/public function actiongettoken()

/*** 使用token獲取使用者資訊

* 獲取連線

* get

** access_token 上一步獲取的token**/

public function actiongetuserinfo()

else

}}

參考文獻

oauth2.0 官方文件  

oauth 2.0 server php 官方文件 

oauth2.0的乙個簡單解釋 阮一峰 

oauth2.0的四種方式 阮一峰 

OAuth系列之 OAuth2 0 Demo 四

這組 oauth 系列教程,第一篇介紹了基本概念,第二篇介紹了獲取令牌的四種方式,今天演示乙個例項,如何通過 oauth 獲取 api 資料。很多 登入時,允許使用第三方 的身份,這稱為 第三方登入 下面就以 github 為例,寫乙個最簡單的應用,演示第三方登入。所謂第三方登入,實質就是 oaut...

Oauth2 0與Oauth1 0的區別

oauth1.0與oauth2.0的區別 雲計算的熱火,引出了大量的開放平台,各種第三方應用建立在開放平台之上,對於安全性的要求,於是出現了oauth協議,2007年發布了oauth1.0協議,同時又開始了oauth2.0的討論,2.0的草案與2011年發布。新的2.0與1.0不相容。下面說一說2....

OAuth系列之簡單理解OAuth 2 0(二)

oauth 2.0 是目前最流行的授權機制,用來授權第三方應用,獲取使用者資料。例如 大型的居民小區 小區有門禁系統 進入的時候需要輸入密碼,那麼問題來了 有沒有一種辦法,讓快遞員能夠自由進入小區,又不必知道小區居民的密碼,而且他的唯一許可權就是送貨,其他需要密碼的場合,他都沒有許可權?於是,需要設...