一、概述
在Web應用的開發搭建中,為使用者提供登入認證功能是一項基礎且普遍的需求,從以往的開發者反饋來看,這一模組往往需要自主搭建,耗時費力。而騰訊數字身份管控平臺(公眾版)(以下簡稱Tencent CIAM)的出現則幫助開發者大大簡化了這一部分的使用體驗。
Tencent CIAM 用於管理公眾網際網路使用者的賬號、註冊和認證規則,打通分散的使用者資料孤島、幫助應用更好地進行使用者識別與畫像,幫助開發者快速搭建安全、可靠的登入認證體系,實現使用者登入認證。目前,雲開發Cloudbase自定義登入可以無縫整合Tencent CIAM,只需匯入程式碼模版和幾行程式碼修改,即可快速在應用中完成身份認證模組的新增。
二、CIAM功能優勢
靈活的註冊/認證流程配置
支援自定義配置登入、註冊、MFA、忘記使用者、忘記密碼等流程,支援自定義logo、公司名稱、域名配置能力。
多種應用型別支援
支援Web應用、單頁應用、移動APP應用、小程式應用等應用型別。
多渠道統一登入體驗
支援透過web應用、移動應用、H5應用、小程式應用、微信公眾號等多種渠道登入的統一登入體驗。
多種認證方式支援
支援賬號密碼認證、簡訊認證、郵箱認證、等通用認證方式,支援微信、QQ、支付寶等主流社交認證源方式。
靈活使用者資料模型自定義
支援根據業務配置不同的使用者模型,支援使用者自定義屬性,支援為屬性欄位配置是否必填、欄位型別等,提供正規表示式等高階能力。
賬號融合支援
支援基於手機號、郵箱、微信 openid、微信 unionid等認證屬性識別同一個自然人使用者並進行賬號融合。
三、CloudBase Express整合Tencent CIAM
3.1 整合流程
開發者透過訪問CloudBase APP/Gateway 服務上註冊的雲函式, CloudBase雲函式程式碼中透過呼叫Tencent CIAM提供的SDK(CIAM-NODE-SDK )提供的方法,使CloudBase應用可以直接呼叫和訪問 Tencent CIAM 中的登入、獲取使用者資訊以及退出等認證能力,並向外暴露該認證能力,使開發者應用根據現有業務完成認證能力的整合。開發者在整合CloudBase Express環境的程式碼後,將即刻擁有Tencent CIAM提供的強大的使用者體系的認證管理能力。
3.2 配置流程
本文將以CloudBase Express應用為例,為大家介紹如何使用雲開發CloudBase的快速建立、使用和整合 Tencent CIAM ,最後預覽整合認證後的效果,只需要以下四步就可以輕鬆完成:
步驟一:透過雲開發CloudBase建立Express應用
1、建立Express環境應用
在快速整合CIAM認證前,你需要建立一個CloudBase Express環境,進入CloudBase控制檯首頁 ,點選新建按鈕,會彈出如下圖所示的新建窗體:
透過選擇Express應用,就可以快速建立一個帶有express示例程式碼的CloudBase環境,進入雲函式->點選函式名稱->函式配置,可以看到建立好的函式資訊如下圖:
2、記錄CloudBase “訪問地址” 資料
待建立完成後,CloudBase會自動生成應用資訊,點選我的應用->應用列表中點選管理->訪問地址,複製該訪問地址,將會用於後續Tencent CIAM引數的配置。
步驟二:建立Tencent CIAM應用,獲取引數資料
在配置前我們需要先建立Tencent CIAM應用,Tencent CIAM控制檯提供了立即建立的能力,可以一鍵完成建立,操作步驟如下:
1、進入 數字身份管控平臺(公眾版) 控制檯,點選立即建立按鈕。
2、配置redirectUri、logoutRedirectUrl回撥地址
進入 數字身份管控平臺(公眾版) ,在應用管理>應用列表>配置>引數配置頁面中配置redirectUri、logoutRedirectUrl的值如下:
引數名
引數值
redirectUri
$/callback
logoutRedirectUrl
$/logout ,$/
注: $即為第一步記錄的值。
3、獲取CloudBase Express模板程式碼中需要的引數資料
至此,Tencent CIAM應用的建立和配置就已經完成啦,在進入到最後一步之前,我們需要在Tencent CIAM控制檯中獲取幾個引數:clientId、userDomain、redirectUri、logoutRedirectUrl
,獲取引數的位置和值如下:
在應用管理>應用列表>檢視詳情>引數配置頁面中記錄redirectUri、logoutRedirectUrl回撥地址
在應用管理>應用列表頁面中獲取clientId 應用ID
2、在個性化設定>域名設定頁面中獲取userDomain 租戶域名
在域名設定介面中開發者可以使用騰訊雲平臺域名或者自有域名,確認後記錄該資料值。
步驟三:在CloudBase中匯入模板程式碼並更新引數資料
下載 cloudbase-express-ciam-sample.zip ,在提交方法中選擇本地上傳ZIP包進行程式碼匯入,程式碼完成後點選儲存並安裝依賴按鈕完成上傳,接下來需要在程式碼編輯器中 找到如下 app.js 檔案中程式碼片段並修改,根據上述獲得的clientId、userDomain、redirectUri、logoutRedirectUrl引數值,更新CloudBase Express應用函式程式碼的 引數資料,進入雲函式->點選對應的函式名稱->函式程式碼Tab頁,對下面的引數進行更新:
const { NodeClient } = require('ciam-node-sdk'); // node-sdk
const ciam = new NodeClient({
clientId: ‘your-clientid', // 此處為CIAM的應用ID,CIAM應用中獲取
userDomain: 'your-userDomain', // 此處為租戶域名,CIAM域名管理中獲取
redirectUri:'your-redirectUri', // 此處為回撥地址,CIAM應用管理中獲取
logoutRedirectUrl: 'your-logoutRedirectUrl', // 此處為退出回撥地址,CIAM應用管理中獲取
scopes: ['openid'],
protocol: 'OIDC_PKCE',
});
步驟四:預覽整合效果
1、配置HTTP訪問服務
在檢視整合效果前,需要配置HTTP訪問服務 ,進行服務註冊。
需要將每一個express路由註冊到HTTP訪問服務中,配置完成後如下圖:
2、預覽整合效果
進入選單我的應用,在應用列表中找到express-starter, 點選訪問按鈕,即可開啟連結,看到程式碼整合後的效果:
點選登入,頁面自動跳轉至CIAM:
至此,你已經完成了CIAM的程式碼整合,可以直接使用CIAM的登入、註冊功能了,全程不到五分鐘,是不是非常快捷。
Tencent CIAM 產品目前已經正式釋出,提供了專用的 ciam-node-sdk,透過該 SDK,您可以將登入認證模組與您自己的 Web 函式專案快速整合,大大簡化開發流程,提升開發體驗。
ciam-node-sdk:https://www.npmjs.com/package/ciam-node-sdk
四、CloudBase自定義登入整合Tencent CIAM
如果你除了在Tencent CIAM控制檯中控制使用者,也希望在雲開發CloudBase中管理使用者,那麼你需要基於CloudBase自定義登入來整合Tencent CIAM。
使用CloudBase自定義登入整合CIAM的使用者,只需要將透過Tencent CIAM登入成功後獲取的使用者資訊交給CloudBase即可完成整合,該整合方案官方已給出非常詳細的整合辦法: 自定義登入 ,以下為整合的流程和配置示例說明:
4.1 整合流程
4.2 整合配置
獲取環境ID 和 自定義登入私鑰
登入Cloudbase控制檯在環境>環境總覽>頁面中獲取環境ID
在環境 > 登入授權 下的自定義登入欄中,單擊私鑰下載或者私鑰複製:
2、頒發Cloudebase的Ticket
接下來呼叫 CloudBase 服務端 SDK,在初始化時傳入第1步的引數和Tencent CIAM使用者已完成登入鑑權後獲取到的使用者資訊(customUserId),便可以簽發出 Ticket,並返回至使用者端。
服務端程式碼示例:
const cloudbase = require("@cloudbase/node-sdk");
// 1. 初始化 SDK
const app = cloudbase.init({
env: "your-env-id",
// 傳入自定義登入私鑰
credentials: require("/path/to/your/tcb_custom_login.json")
});
// 2. “建立CIAM認證服務” 中獲得的使用者資訊,注意CIAM的使用者id取sub欄位(currentUser.sub)
const customUserId = currentUser.sub;
// 3. 建立ticket
const ticket = app.auth().createTicket(customUserId);
// 4. 將ticket返回至客戶端
return ticket;
使用者端應用獲取到 Ticket 之後,便可以呼叫客戶端 SDK 提供的 auth.signInWithTicket()登入 CloudBase:
import cloudbase from '@cloudbase/js-sdk';
const app = cloudbase.init({
env: 'your-env-id'
});
const auth = app.auth();
async function login(){
const loginState = await auth.getLoginState();
// 1. 建議登入前檢查當前是否已經登入
if(!loginState){
// 2. 請求開發者自有服務介面獲取ticket
const ticket = await fetch('...');
// 3. 登入 CloudBase
await auth.customAuthProvider().signIn(ticket);
}
}
login();
恭喜你,至此已經完成了CloudBase自定義登入整合Tencent CIAM的全部工作,可以在雲開發CloudBase的 使用者管理 選單下看到透過Tencent CIAM登入的使用者資訊了,如下圖:
Tencent CIAM的產品文件連結:https://cloud.tencent.com/document/product/1441/55003
Tencent CIAM的官網控制檯連結:https://console.cloud.tencent.com/ciam
歡迎進入騰訊IDAM體驗交流群,免費活動正在火熱進行中!