少走點彎路:Wiki.js 通過 Generic OAuth2 進行身份驗證
Wiki.js
介紹
Wiki.js
是一個開源的百科全書
系統,可以用來搭建自己的知識庫、文檔庫等。
官網 | GitHub
後續內容中的Wiki.js
會用Wiki
代替。
本文環境:Wiki 2.5.289
。
Wiki
的基本環境搭建和使用,網上一大堆,本文就不在累贅。
使用過程中,需要用到身份驗證時,發現出錯後頁面提示資訊不是很友好,最後也是通過調試源碼後配置成功,所以還是很有必要記錄一下配置方式。
基本的配置包含2個部分,分別是授權配置、註冊配置。
1. 授權配置
個人認為這部分是最不友好的地方,卡殼也是卡在這裡。
1.1 Client ID
獲取 Token
時會作為參數傳遞給介面。
1.2 Client Secret
獲取 Token
時會作為參數傳遞給介面。
1.3 Authorization Endpoint URL
授權頁面的地址。
當進入 Wiki
的登錄頁後,選擇 Generic OAuth2
授權登錄時跳轉的地址。
如果同意授權,則需要跳轉到 Wiki
指定的回調頁面(跳轉時可以加入自定義參數)。
每個項目的回調地址都不相同,最簡單的辦法就是在頁面的最下面找到配置參考。
//xxx:3000/login/bf4439-a770-fedee4be57df/callback?MyValue=test
如果回調地址配置的不對,可能會出現Invalid authentication provider.
錯誤頁。
1.4 Token Endpoint URL
獲取Token
的介面地址。
在調用該地址時,Wiki
會自動附帶下面這些參數:
grant_type=authorization_code
client_id=1.1中配置的值
client_secret=1.2中配置的值
自定義參數(1.3中配置的值)
服務端驗證邏輯完成後,介面必須返回包含以下欄位的返回值(注意區分大小寫)
{
"access_token":"xxx"
}
如果返回值不合法,會出現錯誤頁Failed to obtain access token
。
1.5 User Info Endpoint URL
成功拿到Token
後,獲取用戶資訊的介面地址。
可以設置
Wiki
獲取用戶資訊時Token
的傳遞方式:Query string
或Authorization header
伺服器根據 Token
獲取用戶資訊,最終返回包含以下欄位的返回值(注意區分大小寫)
{
"UserId":10086,
"Name":"張三",
"Email":"[email protected]"
}
如果返回值不合法,會出現錯誤頁Missing or invalid email address from profile.
Wiki
系統中是通過
1.6 ID Claim
用戶資訊介面中返回的用戶 ID
欄位名。
1.7 Display Name Claim
用戶資訊介面中返回的用戶名稱
欄位名。
1.8 Email Claim
用戶資訊介面中返回的郵箱
欄位名,該欄位值必須保證唯一。
2. 註冊配置
2.1 啟用開放註冊
授權登錄完成後,當用戶資訊在 Wiki
中不存在時,則會新建用戶資訊並完成登錄。
2.1 禁用開放註冊
授權用戶的 Email
必須已經在 Wiki
中註冊,否則無法登錄,出現錯誤頁You are not authorized to login.