SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
整合 Open ID
范聖佑 Shengyou Fan
新北市樹林國⼩小 (2015/07/11)
適
⽤用
5.1
版
單元主題
• 說明新北市政府教育局 Open ID 系統
• 解析 Open ID 範例程式
• 了解 Open ID 的認證流程
• 將新北市政府教育局 Open ID 認證系統整合⾄至
Laravel,讓使⽤用者以能夠以 Open ID 登⼊入範例程式
新北市政府教育局 Open ID
• 由新北市政府教育局提供的 Open ID 認證服務
• 提供全市師⽣生可以使⽤用單⼀一帳號登⼊入各個⽀支援開放
式認證服務的網站
• ⺫⽬目前僅提供登⼊入服務,帳號註冊需由校⽅方⼈人員協助
• 本單元應主辦單位之邀,⽰示範如何將 Laravel 整合新
北市政府教育局 Open ID 認證,做為校務系統整合
Open ID 的範例
• 關於新北市政府教育局 Open ID 的詳細系統說明,
可參考:https://openid.ntpc.edu.tw/
Open	
  ID	
  認證機制
解析範例程式
• 為了解服務介接⽅方式,請先⾄至新北市政府教育局
Open ID 官網下載範例程式:https://
openid.ntpc.edu.tw/example.zip
• 參考 example/php/index.php 內的範例程式後,動作
可分三塊:
- ⾸首次瀏覽時,出現登⼊入表單 (登⼊入按鈕)
- 登⼊入表單以 POST 趨動登⼊入流程,跳轉⾄至認證主機
- 認證主機回傳後,確認使⽤用者沒有取消且提供授權,
就可以⽤用 Open ID 取得使⽤用者資料,並依格式轉換
顯⽰示在網⾴頁上
Open ID 認證流程⽰示意圖
GET
POST
點擊登⼊入
設定 Open ID
auth/openid
重導認證
使⽤用者登⼊入
Open ID登⼊入⾴頁
確認授權
Open ID 授權⾴頁認證返回
auth/login
auth/register
產⽣生重導網址
/home
取得 user 資料
auth/openid
註冊/登⼊入 user
由 Open	
  ID
驗證帳號
重導⾴頁⾯面
整合	
  Open	
  ID	
  認證
Open ID 的認證流程
• 使⽤用者在 /auth/register 或 /auth/login ⾴頁⾯面
點選使⽤用 Open ID 登⼊入
• 表單送出後,經過 OpenIdController@redirect
設定 Open ID 認證主機位置以及需要取得的使⽤用者
資料欄位,並將⾴頁⾯面重新導向⾄至認證主機
• 使⽤用者在認證主機所提供的登⼊入畫⾯面輸⼊入認證資料
後同意授權,認證主機會再重新將⾴頁⾯面導向⾄至我們
的應⽤用程式,並將使⽤用者資料拋給
OpenIdController@process
• OpenIdController 處理註冊/登⼊入資料完畢後,儲
存使⽤用者並將其登⼊入,再重新導向⾄至登⼊入成功⾴頁
安裝 lightopenid 套件
• 從範例程式裡發現其所使⽤用的 Open ID 套件函式庫
為 kounta/lightopenid,因此可依照標準套件⽅方
式安裝⾄至 Laravel 專案內使⽤用:
- ⾄至 Packagist 上查詢套件資訊,決定使⽤用的套件版本
- 修改 composer.json 檔案,增加 require 區段
- 使⽤用 composer	
  validate 指令驗證格式
- 使⽤用 composer	
  update 指令安裝套件
- commit 修改過後的 composer.json 及 composer.lock
修改註冊/登⼊入表單
• 在原本的註冊、登⼊入表單上新增⼀一個動作為 POST 的
表單,並在表單送出後導向
OpenIdController@redirect
//	
  resources/views/auth/login.blade.php	
  
{!!	
  Form::open(['route'	
  =>	
  'openid.redirect',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'method'	
  =>	
  'post'])	
  !!}	
  
	
  	
  	
  	
  {!!	
  Form::submit('OpenID	
  登⼊入')	
  !!}	
   	
  
{!!	
  Form::close()	
  !!}
設定Open ID Routes
• 在 app/Http/routes.php 裡新增 Open ID 所需要的
Route 規則
• 為了與 Laravel 預設的 Controller 相同,⼀一樣放在
Auth 資料夾內
• 若有需要,可⾃自定 Route 名稱,⽅方便其他⾴頁⾯面以
route() 連結
//	
  app/Http/routes.php	
  
Route::post('auth/openid',	
  ['as'	
  =>	
  'openid.redirect',	
  
'uses'	
  =>	
  'AuthOpenIdController@redirect']);	
  
Route::get('auth/openid'	
  ,	
  ['as'	
  =>	
  'openid.process'	
  ,	
  
'uses'	
  =>	
  'AuthOpenIdController@process']);
新增 OpenIdController
• 使⽤用 make:controller 新增 OpenIdController,
將其移⾄至 Auth 資料夾內,並依照 PSR-4 規範修改
namespace 設定
• 在 OpenIdController 裡實作兩個⽅方法:
redirect() 及 process()
- redirect():接收來⾃自表單 POST 請求,啟始
Open ID 認證設定
- process():接收來⾃自 Open ID 認證主機回傳的資
訊,將使⽤用者註冊/登⼊入
實作 redirect()
• 接收來⾃自表單的 POST 請求,啟始 LightOpenID 實
體,設定應⽤用程式根⺫⽬目錄網址
• 依範例程式判別 Open ID mode,並設定 Open ID 的
identity 及 required 資訊
• 設定完成後,將⾴頁⾯面重導⾄至認證主機網址
//	
  app/Http/Controllers/Auth/OpenIdController.php	
  
$openId	
  =	
  new	
  LightOpenID($request-­‐>getHttpHost());	
  
if(!$openId-­‐>mode)	
  {	
  
	
   $openId-­‐>identity	
  =	
  /*	
  認證網址	
  */;	
  
	
   $openId-­‐>required	
  =	
  /*	
  使⽤用者授權資訊	
  */;	
  
	
   return	
  redirect($openId-­‐>authUrl());	
  
}
將設定值移⾄至 config
• 在 config 新增 openid.php,裡⾯面直接回傳陣列
• 在 Controller 裡就可以透過
config('{filename}.{key}') 取得設定值
//	
  app/Http/Controllers/Auth/OpenIdController.php	
  
$openId-­‐>identity	
  =	
  config('openid.identity');	
  
$openId-­‐>required	
  =	
  config('openid.required');	
  
//	
  config/openid.php	
  
<?php	
  
return	
  [	
  
	
   'identity'	
  =>	
  /*	
  認證網址	
  */,	
  
	
   'required'	
  =>	
  [	
  
	
   	
   /*	
  授權陣列	
  */	
  
	
   ],	
  
];
實作 process()
• 認證完成後,會以 GET 重導⾄至 /auth/openid Route
• 先確認使⽤用者沒有取消註冊/登⼊入;也有提供所要求
的授權權限
//	
  app/Http/Controllers/Auth/OpenIdController.php	
  
$openId	
  =	
  new	
  LightOpenID($request-­‐>getHttpHost());	
  
if	
  ($openId-­‐>mode	
  ==	
  'cancel')	
  {	
  
	
   /*	
  重導⾴頁⾯面、顯⽰示訊息	
  */	
  
}	
  
if	
  (!$openId-­‐>validate())	
  {	
  
	
   /*	
  重導⾴頁⾯面、顯⽰示訊息	
  */	
  
}
註冊/登⼊入使⽤用者
• 先取得使⽤用者的 Open ID 資訊,若已存在,則登⼊入
使⽤用者;若不存在,則要先建⽴立使⽤用者資訊並儲存
//	
  app/Http/Controllers/Auth/OpenIdController.php	
  
//	
  依範例對照表取得使⽤用者	
  name	
  及	
  email…	
  
$attributes	
  =	
  $openId-­‐>getAttributes();	
  
//	
  搜尋使⽤用者存在與否	
  
$user	
  =	
  AppUser::firstOrNew([	
  
	
   'openid'	
  =>	
  $account	
  
]);	
  
//	
  註冊使⽤用者	
  
if	
  (!$user-­‐>exists)	
  {	
  
	
   /*	
  儲存使⽤用者資料	
  */	
  
}	
  
//	
  登⼊入使⽤用者	
  
Auth::login($user);
單元總結
• 在這個單元裡我們學到了些什麼?
- Open ID 認證流程
- 使⽤用 kounta/lightopenid 套件,並整合⾄至
Laravel 內
- ⽰示範專案 Open ID 實作⽅方式
Q & A
歡迎提問討論

Contenu connexe

Tendances

Laravel - 系統全攻略
Laravel - 系統全攻略Laravel - 系統全攻略
Laravel - 系統全攻略Vincent Chi
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用Shengyou Fan
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作Shengyou Fan
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 SeedingShengyou Fan
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理Shengyou Fan
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹Shengyou Fan
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制Shengyou Fan
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Package安裝與使用
Package安裝與使用Package安裝與使用
Package安裝與使用Shengyou Fan
 

Tendances (20)

驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
Laravel - 系統全攻略
Laravel - 系統全攻略Laravel - 系統全攻略
Laravel - 系統全攻略
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用
 
工作坊總結
工作坊總結工作坊總結
工作坊總結
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
Route路由控制
Route路由控制Route路由控制
Route路由控制
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
CRUD 綜合應用
CRUD 綜合應用CRUD 綜合應用
CRUD 綜合應用
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Package安裝與使用
Package安裝與使用Package安裝與使用
Package安裝與使用
 

En vedette

啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定Shengyou Fan
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORMShengyou Fan
 

En vedette (9)

使用者認證
使用者認證使用者認證
使用者認證
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定
 
課程簡介
課程簡介課程簡介
課程簡介
 
工作坊總結
工作坊總結工作坊總結
工作坊總結
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORM
 
Route 機制
Route 機制Route 機制
Route 機制
 

Similaire à 整合 Open ID

如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化Mu Chun Wang
 
北護大/FHIR 開發簡介與應用
北護大/FHIR 開發簡介與應用北護大/FHIR 開發簡介與應用
北護大/FHIR 開發簡介與應用Lorex L. Yang
 
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0) 開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0) My own sweet home!
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4Daniel Chou
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享國昭 張
 
91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOpsAndrew Wu
 
Laradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHLaradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHSzuping Wang
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Kirk Chen
 
Build your own kubernetes apiserver and resource type
Build your own kubernetes apiserver and resource typeBuild your own kubernetes apiserver and resource type
Build your own kubernetes apiserver and resource typeinwin stack
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練5
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練52015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練5
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練5Duran Hsieh
 
Codeception test
Codeception testCodeception test
Codeception testChin-Yu Ku
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛Edward Kuo
 
網站規劃
網站規劃網站規劃
網站規劃jiannrong
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow introted-xu
 
Extend the Kubernetes API with CRD and Custom API Server
Extend the Kubernetes API with CRD and Custom API ServerExtend the Kubernetes API with CRD and Custom API Server
Extend the Kubernetes API with CRD and Custom API Serverinwin stack
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
應用程式部署
應用程式部署應用程式部署
應用程式部署Shengyou Fan
 
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17twMVC
 
Introduction to ASP.NET MVC and MVC 5 Features
Introduction to ASP.NET MVC and MVC 5 FeaturesIntroduction to ASP.NET MVC and MVC 5 Features
Introduction to ASP.NET MVC and MVC 5 FeaturesJeff Chu
 

Similaire à 整合 Open ID (20)

如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
 
北護大/FHIR 開發簡介與應用
北護大/FHIR 開發簡介與應用北護大/FHIR 開發簡介與應用
北護大/FHIR 開發簡介與應用
 
使用者認證
使用者認證使用者認證
使用者認證
 
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0) 開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享
 
91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps91APP: 從 "零" 開始的 DevOps
91APP: 從 "零" 開始的 DevOps
 
Laradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHLaradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTH
 
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016
 
Build your own kubernetes apiserver and resource type
Build your own kubernetes apiserver and resource typeBuild your own kubernetes apiserver and resource type
Build your own kubernetes apiserver and resource type
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練5
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練52015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練5
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練5
 
Codeception test
Codeception testCodeception test
Codeception test
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
網站規劃
網站規劃網站規劃
網站規劃
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow intro
 
Extend the Kubernetes API with CRD and Custom API Server
Extend the Kubernetes API with CRD and Custom API ServerExtend the Kubernetes API with CRD and Custom API Server
Extend the Kubernetes API with CRD and Custom API Server
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
應用程式部署
應用程式部署應用程式部署
應用程式部署
 
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17
 
Introduction to ASP.NET MVC and MVC 5 Features
Introduction to ASP.NET MVC and MVC 5 FeaturesIntroduction to ASP.NET MVC and MVC 5 Features
Introduction to ASP.NET MVC and MVC 5 Features
 

Plus de Shengyou Fan

[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
 
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...Shengyou Fan
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀Shengyou Fan
 
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能Shengyou Fan
 
How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023Shengyou Fan
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀Shengyou Fan
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台Shengyou Fan
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇Shengyou Fan
 
Using the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseUsing the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseShengyou Fan
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具Shengyou Fan
 
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園Shengyou Fan
 
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform初探 Kotlin Multiplatform
初探 Kotlin MultiplatformShengyou Fan
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率Shengyou Fan
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南Shengyou Fan
 
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用Shengyou Fan
 
Composer 經典食譜
Composer 經典食譜Composer 經典食譜
Composer 經典食譜Shengyou Fan
 
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具Shengyou Fan
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS AggregatorShengyou Fan
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON APIShengyou Fan
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin ServerlessShengyou Fan
 

Plus de Shengyou Fan (20)

[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
 
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
 
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
 
How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
 
Using the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseUsing the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your Database
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
 
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園
 
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform初探 Kotlin Multiplatform
初探 Kotlin Multiplatform
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
 
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
 
Composer 經典食譜
Composer 經典食譜Composer 經典食譜
Composer 經典食譜
 
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
 

整合 Open ID

  • 1. 整合 Open ID 范聖佑 Shengyou Fan 新北市樹林國⼩小 (2015/07/11) 適 ⽤用 5.1 版
  • 2. 單元主題 • 說明新北市政府教育局 Open ID 系統 • 解析 Open ID 範例程式 • 了解 Open ID 的認證流程 • 將新北市政府教育局 Open ID 認證系統整合⾄至 Laravel,讓使⽤用者以能夠以 Open ID 登⼊入範例程式
  • 3. 新北市政府教育局 Open ID • 由新北市政府教育局提供的 Open ID 認證服務 • 提供全市師⽣生可以使⽤用單⼀一帳號登⼊入各個⽀支援開放 式認證服務的網站 • ⺫⽬目前僅提供登⼊入服務,帳號註冊需由校⽅方⼈人員協助 • 本單元應主辦單位之邀,⽰示範如何將 Laravel 整合新 北市政府教育局 Open ID 認證,做為校務系統整合 Open ID 的範例 • 關於新北市政府教育局 Open ID 的詳細系統說明, 可參考:https://openid.ntpc.edu.tw/
  • 5. 解析範例程式 • 為了解服務介接⽅方式,請先⾄至新北市政府教育局 Open ID 官網下載範例程式:https:// openid.ntpc.edu.tw/example.zip • 參考 example/php/index.php 內的範例程式後,動作 可分三塊: - ⾸首次瀏覽時,出現登⼊入表單 (登⼊入按鈕) - 登⼊入表單以 POST 趨動登⼊入流程,跳轉⾄至認證主機 - 認證主機回傳後,確認使⽤用者沒有取消且提供授權, 就可以⽤用 Open ID 取得使⽤用者資料,並依格式轉換 顯⽰示在網⾴頁上
  • 6. Open ID 認證流程⽰示意圖 GET POST 點擊登⼊入 設定 Open ID auth/openid 重導認證 使⽤用者登⼊入 Open ID登⼊入⾴頁 確認授權 Open ID 授權⾴頁認證返回 auth/login auth/register 產⽣生重導網址 /home 取得 user 資料 auth/openid 註冊/登⼊入 user 由 Open  ID 驗證帳號 重導⾴頁⾯面
  • 8. Open ID 的認證流程 • 使⽤用者在 /auth/register 或 /auth/login ⾴頁⾯面 點選使⽤用 Open ID 登⼊入 • 表單送出後,經過 OpenIdController@redirect 設定 Open ID 認證主機位置以及需要取得的使⽤用者 資料欄位,並將⾴頁⾯面重新導向⾄至認證主機 • 使⽤用者在認證主機所提供的登⼊入畫⾯面輸⼊入認證資料 後同意授權,認證主機會再重新將⾴頁⾯面導向⾄至我們 的應⽤用程式,並將使⽤用者資料拋給 OpenIdController@process • OpenIdController 處理註冊/登⼊入資料完畢後,儲 存使⽤用者並將其登⼊入,再重新導向⾄至登⼊入成功⾴頁
  • 9. 安裝 lightopenid 套件 • 從範例程式裡發現其所使⽤用的 Open ID 套件函式庫 為 kounta/lightopenid,因此可依照標準套件⽅方 式安裝⾄至 Laravel 專案內使⽤用: - ⾄至 Packagist 上查詢套件資訊,決定使⽤用的套件版本 - 修改 composer.json 檔案,增加 require 區段 - 使⽤用 composer  validate 指令驗證格式 - 使⽤用 composer  update 指令安裝套件 - commit 修改過後的 composer.json 及 composer.lock
  • 10. 修改註冊/登⼊入表單 • 在原本的註冊、登⼊入表單上新增⼀一個動作為 POST 的 表單,並在表單送出後導向 OpenIdController@redirect //  resources/views/auth/login.blade.php   {!!  Form::open(['route'  =>  'openid.redirect',                                  'method'  =>  'post'])  !!}          {!!  Form::submit('OpenID  登⼊入')  !!}     {!!  Form::close()  !!}
  • 11. 設定Open ID Routes • 在 app/Http/routes.php 裡新增 Open ID 所需要的 Route 規則 • 為了與 Laravel 預設的 Controller 相同,⼀一樣放在 Auth 資料夾內 • 若有需要,可⾃自定 Route 名稱,⽅方便其他⾴頁⾯面以 route() 連結 //  app/Http/routes.php   Route::post('auth/openid',  ['as'  =>  'openid.redirect',   'uses'  =>  'AuthOpenIdController@redirect']);   Route::get('auth/openid'  ,  ['as'  =>  'openid.process'  ,   'uses'  =>  'AuthOpenIdController@process']);
  • 12. 新增 OpenIdController • 使⽤用 make:controller 新增 OpenIdController, 將其移⾄至 Auth 資料夾內,並依照 PSR-4 規範修改 namespace 設定 • 在 OpenIdController 裡實作兩個⽅方法: redirect() 及 process() - redirect():接收來⾃自表單 POST 請求,啟始 Open ID 認證設定 - process():接收來⾃自 Open ID 認證主機回傳的資 訊,將使⽤用者註冊/登⼊入
  • 13. 實作 redirect() • 接收來⾃自表單的 POST 請求,啟始 LightOpenID 實 體,設定應⽤用程式根⺫⽬目錄網址 • 依範例程式判別 Open ID mode,並設定 Open ID 的 identity 及 required 資訊 • 設定完成後,將⾴頁⾯面重導⾄至認證主機網址 //  app/Http/Controllers/Auth/OpenIdController.php   $openId  =  new  LightOpenID($request-­‐>getHttpHost());   if(!$openId-­‐>mode)  {     $openId-­‐>identity  =  /*  認證網址  */;     $openId-­‐>required  =  /*  使⽤用者授權資訊  */;     return  redirect($openId-­‐>authUrl());   }
  • 14. 將設定值移⾄至 config • 在 config 新增 openid.php,裡⾯面直接回傳陣列 • 在 Controller 裡就可以透過 config('{filename}.{key}') 取得設定值 //  app/Http/Controllers/Auth/OpenIdController.php   $openId-­‐>identity  =  config('openid.identity');   $openId-­‐>required  =  config('openid.required');   //  config/openid.php   <?php   return  [     'identity'  =>  /*  認證網址  */,     'required'  =>  [       /*  授權陣列  */     ],   ];
  • 15. 實作 process() • 認證完成後,會以 GET 重導⾄至 /auth/openid Route • 先確認使⽤用者沒有取消註冊/登⼊入;也有提供所要求 的授權權限 //  app/Http/Controllers/Auth/OpenIdController.php   $openId  =  new  LightOpenID($request-­‐>getHttpHost());   if  ($openId-­‐>mode  ==  'cancel')  {     /*  重導⾴頁⾯面、顯⽰示訊息  */   }   if  (!$openId-­‐>validate())  {     /*  重導⾴頁⾯面、顯⽰示訊息  */   }
  • 16. 註冊/登⼊入使⽤用者 • 先取得使⽤用者的 Open ID 資訊,若已存在,則登⼊入 使⽤用者;若不存在,則要先建⽴立使⽤用者資訊並儲存 //  app/Http/Controllers/Auth/OpenIdController.php   //  依範例對照表取得使⽤用者  name  及  email…   $attributes  =  $openId-­‐>getAttributes();   //  搜尋使⽤用者存在與否   $user  =  AppUser::firstOrNew([     'openid'  =>  $account   ]);   //  註冊使⽤用者   if  (!$user-­‐>exists)  {     /*  儲存使⽤用者資料  */   }   //  登⼊入使⽤用者   Auth::login($user);
  • 17. 單元總結 • 在這個單元裡我們學到了些什麼? - Open ID 認證流程 - 使⽤用 kounta/lightopenid 套件,並整合⾄至 Laravel 內 - ⽰示範專案 Open ID 實作⽅方式