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