oauth2 0服務端與客戶端搭建

2021-09-07 08:36:02 字數 4477 閱讀 3865

oauth2.0服務端與客戶端搭建 - 推酷

今天搭建了oauth2.0服務端與客戶端。把搭建的過程記錄一下。具體實現的功能是:client.ruanwenwu.cn的使用者能夠通過 server.ruanwenwu.cn的使用者名稱和密碼登陸client.ruanwenwu.cn。並且登陸 後,client.ruanwenwu.cn的使用者能獲取server.ruanwenwu.cn**的一些資源。

一、oauth2.0的作用

1、搭建第三方登入平台(就像你用很多**支援qq登入。其實是qq提供的oauth2.0服務端支援。**作為第三方,只要用oauth2.0標準請求服務端,求能得到使用者資訊,並實現登入)。

2、公共資源管理。

就 像你(y)想通過乙個列印**的**(a)來列印你存放在google(b)的**。你就要通過這個a來獲取b的**。b肯定要驗證是否是他的使用者y的請 求,驗證通過才把**傳遞給a實現列印。問題是y不想把賬號密碼直接給a。用oauth2.0就是來解決這個問題的:

a先 把y導向b的站點進行授權。授權通過,b向a傳送oauth_code。a拿到這個oauth_code,連同a的client_id和 oauth_secrete傳送給b,如果資料正確,b就會給a傳送oauth_token。有了這個token,a就可以獲取b的相關資源的。

基本的流程是這樣。下面是具體的實現過程。

二、oauth2.0服務端的搭建。

oauth2.0的服務端分為驗證伺服器和資源伺服器。這兩個伺服器也可以是同乙個伺服器(只不過把這兩個功能用乙個 伺服器來完成罷了)。

說明:我的實現都在thinkphp3.2.3框架下實現。

2、配置虛擬機器server.ruanwenwu.cn

<?php

return array( //'配置項'=>'配置值' //資料庫設定 'db_type' => 'mysql', 'db_host' => '127.0.0.1',//localhost 'db_name' => 'oauth', 'db_user' => 'root', 'db_pwd' => 'root', 'db_port' => '3306', 'scope_info' => array( //這是授權選項。根據你自己的專案來 array( 'name' => '個人資訊', 'value' => 'basicinfo' ), array( 'name' => '論壇發帖回帖', 'value' => 'bbsinfo' ), ), 'oauth2_codes_table' =>'oauth_code', //這裡是oauth專案需要用的三個基礎表 'oauth2_clients_table' =>'oauth_client', 'oauth2_token_table' =>'oauth_token', 'secretkye' => 'mumayi!@#', //下面是一些**自定義的專案。可以根據自己的情況來寫或者不寫 //session 有效期 'session_expires' => 1200, //key 有效期 'pass_key_expires' => 86400, //key 有效期 'phone_key_expires' => 300, //key 加密 整型 數字 必須為 int 'pass_key_calc' => 1314, );

4、建oauth表。

set foreign_key_checks=0;

-- ---------------------------- -- table structure for oauth_client -- ---------------------------- drop table if exists `oauth_client`; create table `oauth_client` ( `id` bigint(20) not null auto_increment, `client_id` varchar(32) not null, `client_secret` varchar(32) not null, `redirect_uri` varchar(200) not null, `create_time` int(11) not null, primary key (`id`) ) engine=myisam auto_increment=3 default charset=utf8; -- ---------------------------- -- table structure for oauth_code -- ---------------------------- drop table if exists `oauth_code`; create table `oauth_code` ( `id` bigint(20) not null auto_increment, `client_id` varchar(32) not null, `user_id` int(11) not null default '1', `code` varchar(40) not null, `redirect_uri` varchar(200) not null, `expires` int(11) not null, `scope` varchar(250) default null, primary key (`id`) ) engine=myisam auto_increment=57 default charset=utf8; -- ---------------------------- -- table structure for oauth_token -- ---------------------------- drop table if exists `oauth_token`; create table `oauth_token` ( `id` bigint(20) not null auto_increment, `client_id` varchar(32) not null, `user_id` int(11) not null, `access_token` varchar(40) not null, `refresh_token` varchar(40) not null, `expires_in` int(11) not null, `scope` varchar(200) default null, primary key (`id`) ) engine=myisam auto_increment=26 default charset=utf8;

5、引入oauth2.0服務端類檔案。

5-1、在\server.ruanwenwu.cn\thinkphp\library\vendor\目錄下建立oauth目錄。

5-2、引入oauth2.0服務端php指令碼。

在剛建立的oauth目錄下引入oauth2.class.php這個檔案基本不用做修改。我們的操作都在繼承這個類的子類上完成。類的**如下:

<?php

/** * @mainpage * oauth 2.0 server in php, originally written for * href=""> open dining>. supports * href="">ietf draft v10>. * * source repo has sample servers implementations for * href=""> php data objects> and * href="">mongodb>. easily adaptable to other * storage engines. * * php data objects supports a variety of databases, including mysql, * microsoft sql server, sqlite, and oracle, so you can try out the sample * to see how it all works. * * we're expanding the wiki to include more helpful documentation, but for * now, your best bet is to view the oauth.php source - it has lots of * comments. * * @author tim ridgely @gmail.com> * @author aaron parecki @parecki.com> * @author edison wong @pantarei-design.com> * * @see */ /** * the default duration in seconds of the access token lifetime. */ define("oauth2_default_access_token_lifetime", 3600); /** * the default duration in seconds of the authorization code lifetime. */ define("oauth2_default_auth_code_lifetime", 30); /** * the default duration in seconds of the refresh token lifetime. */ define("oauth2_default_refresh_token_lifetime", 1209600); /** * @defgroup oauth2_section_2 client credentials * @$/i"

C 服務端與客戶端

c 服務端與客戶端連線實現的由來 那麼既然乙個伺服器端口可以應對多個客戶端連線,那麼接下來我們就看一下,如何讓多個客戶端與服務端連線。如同我們上面所說的,乙個tcpclient就是乙個socket,所以我們只要建立多個tcpclient,然後再呼叫connect 方法就可以了 c 服務端與客戶端連線...

服務端與客戶端互動

搭建伺服器 伺服器端 using system.net.sockets using system.net using system.io using system.text namespace sockerservice endpoint point new ipendpoint ipaddress...

NodeJS TCP客戶端與服務端

server.js var net require net 載入網路模組 var clients 0 建立id來引用連線的每乙個客戶端 var server net.createserver function client client.write welcome client clientid 使...