主頁 > Drupal | 其他 > 如何用Drupal做統一認證功能?

如何用Drupal做統一認證功能?

PDF版本

真正的統一認證一般指中心登錄,drupal有很多相關的模塊可以實現,比如drupal SSO模塊, 如果都是Drupal站點可以用bakery模塊實現,也可以用CAS模塊實現CAS服務。

oauth2.0

本文重點講得是用open auth 2.0協議實現oauth服務,通過oauth協議實現統一認證的服務。

OAuth本質就是兩個服務之間的通訊,通過一個服務授權另一個服務,通過認證,找了一個圖片,添加了注釋,如下所示:

oauth2

 

所需模塊具體如下:

OAuth2_server: ?https://www.drupal.org/project/oauth2_server

OAuth2_client: ?https://www.drupal.org/project/oauth2_client

以及相應的OAuth2.0的PHP依賴包。

模塊的安裝和配置:

模塊的安裝,比較簡單,下載安裝以及下載依賴包。
模塊的配置,主要是創建一個Oauth server,然后添加客戶端。
創建一個Oauth server實例,注意選擇授權類型,一般code和token都是要選的。

另外,創建一個Client實例的時候,要注意首次需填寫密鑰,另外要設置授權的URL,具體參考下面的截圖:

Oauth Server配置:

oauth-server1

Oauth Server添加Client:

oauth-server2

 

四種授權模式:
Oauth2.0提供了四種授權模式,其中授權碼模式是最經典常用的模式,具體4種如下:
1. 授權碼(認證碼)模式 (Authorization code) response_type=code
2. 簡化(隱形)模式 (Impilict) response_type=token
3. 用戶名密碼模式 (Resource Owner Password Credential) grant_type=password
4. 客戶端模式 (Client Credential) grant_type=client_credential

消費Oauth服務
使用Oauth服務可以用Drupal的Oauth client模塊,也可以自己寫一段代碼測試。

授權發起頁面:

$appid     = 'testapp';
$callback  = "http://testapp.demo.xiao-an.com/callback.php";
$callback  = urlencode($callback);
 
$state = $_SERVER['REQUEST_URI'];
$key   = substr(md5($state), 0, 8);
$type  = 'code'; //token
 
$home = 'http://uauth.demo.xiao-an.com';
$forward = "{$home}/oauth2/authorize?response_type={$type}&client_id={$appid}&redirect_uri={$callback}&state={$key}&scope=openid+unionlib_basic&source=unionlib";
 
header('Location: ' . $forward);

授權回調頁面:

$code = $_REQUEST['code'];
$parameters = array(
    'client_id'  => $appid,
    'client_secret' => $appsecret,
    'grant_type' => 'authorization_code',
    'code' => $code,
    'redirect_uri' => 'http://testapp.demo.xiao-an.com/callback.php'
  );
$param_data = array(
   'data'   => _query_string_encode($parameters),
  );
$headers = array('Content-Type' => 'application/x-www-form-urlencoded');
$url  = 'http://uauth.demo.xiao-an.com/oauth2/token?' . _query_string_encode($parameters);
$http = _http_request($url, $headers, 'POST', _query_string_encode($parameters));
$data = json_decode($http->data);
var_dump($data);

其中http_request函數直接從drupal的函數庫中復制過來。

通過第三方庫實現統一認證

一般情況下,都是通過現有的第三方庫實現統一認證,比如學生庫、讀者庫等,所以要實現通過第三方庫登錄,還要做一些額外的工作。
1. 實現hook_user_login
因為模塊的oauth直接使用drupal的login form實現用戶名密碼認證登錄,所以直接實現這個hook即可。
2. 用戶管理
通過遠程的接口,自定義views的handler來實現遠程用戶管理。
此外,如果不希望用戶通過默認的Drupal Login Form登錄,自定義form的話,可以實現hook_oauth2_server_pre_authorize,如果用戶沒有登錄,直接重定向到自定義form,認證完成之后再重定向回來。

我們針對某圖書館項目,實現完整的統一認證架構,具體可以下載說明文檔:

統一認證系統架構及案例


聲明: 本站所有文章歡迎轉載,所有文章未說明,均屬于原創,轉載均請注明出處。
本文有效鏈接: http://www.vczhtn.live/2017/08/drupal-open-auth/
版權所有: Drupal與高性能網站架構 http://www.vczhtn.live


,

發表評論

電子郵件地址不會被公開。 必填項已用 * 標注


8 + 二 =

您可以使用這些 HTML 標簽和屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:0

下面所列的是引用到本博客的鏈接
如何用Drupal做統一認證功能? 來自 Drupal與高性能網站架構
頂部
安徽福彩15选5走势图