authentik#

authentik 是一個 IdP(身份提供者)與單點登入(SSO)平台,將安全性置於每段程式碼、每一項功能的核心,強調彈性與多功能性。

Install#

使用 Docker 下載並執行官方提供的 Docker Compose 檔案:

wget https://docs.goauthentik.io/docker-compose.yml

執行以下指令產生密碼和秘密金鑰,並將其寫入你的 .env 檔案:

echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env
echo "AUTHENTIK_ERROR_REPORTING__ENABLED=true" >> .env

預設情況下,authentik 內部監聽 HTTP 的 9000 埠和 HTTPS 的 9443 埠。若要使用不同的埠,如 80 和 443,您可以在 .env 中設定以下變數:

AUTHENTIK_HTTP_PORT=80
AUTHENTIK_HTTPS_PORT=443

之後,執行以下指令完成:

docker-compose up -d

要開始初始設定,請前往

http://<your server's IP or hostname>:9000/if/flow/initial-setup/


Operate#

整合 Google Authenticator#

第一階段:在 Google Cloud Console 申請憑證 請前往 Google Cloud Console 並登入你的 Google 帳號。

  1. 建立一個新的專案(Project)。
    • 左上角選擇專案 ->「新增專案」。
    • 取個名字,例如 HomeLab-SSO,點擊建立。
  2. 設定 OAuth 同意畫面 (OAuth consent screen):
    • 左側選單進入 [API 和服務] -> [OAuth 同意畫面]。
    • User Type (使用者類型):選擇 External (外部)。(除非你有 Google Workspace 組織,否則只能選這個)。
    • 點擊建立。
    • App Information:填寫 App 名稱 (如 “My Home Lab”) 和聯絡 Email。
    • 一直按「儲存並繼續」,直到最後的「Back to Dashboard」。
    • 重要: 在測試階段 (Testing),你需要手動把那 2-3 個使用者的 Gmail 加入 [Test users (測試使用者)] 清單中,否則他們無法登入。
  3. 建立憑證 (Create Credentials):
    • 左側選單進入 [憑證]。

    • 點擊上方 [+ 建立憑證] -> [OAuth 用戶端 ID]。

    • 應用程式類型:選擇 Web application (網頁應用程式)。

    • 已授權的重新導向 URI (Authorized redirect URIs):這是最關鍵的一步,填錯就會報錯。格式如下:

        `https://<你的Authentik網址>/source/oauth/callback/google/`
      
    • 點擊建立。

    • 建立後會看到 Client ID 和 Client Secret,請複製並保存這些資訊,稍後會用到。 第二階段:在 Authentik 設定來源 回到你的 Authentik 管理員介面 (/if/admin/)。

  4. 新增來源:
    • 左側選單:Directory (目錄) -> Federation & Social Login (聯邦與社交登入)。
    • 點擊 Create (建立)。
    • 選擇 Google OAuth Source,點擊 Next。
  5. 填寫設定:
    • Name: Google (這是顯示給使用者看的名稱)。
    • Slug: google (這是網址的一部分,別改)。
    • Consumer Key (Client ID): 貼上剛剛 Google 給你的 ID。
    • Consumer Secret (Client Secret): 貼上剛剛 Google 給你的密鑰。
  6. 關鍵流程設定 (Flow Settings) - 這是自動註冊的關鍵:
    • 往下捲找到 Service Connection 或 Protocol Settings。
    • Enrollment flow (註冊流程):請選擇 default-source-enrollment (或 default-source-enrollment-if-sso)。
      • 解釋:這代表如果是一個新的 Gmail 登入,Authentik 會自動執行這個流程來幫他在本地建一個帳號。
    • User matching mode (使用者對應模式):建議選 Link to a user with identical email address. Can have security implications when a source doesn't validate email addresses
      • 解釋:如果使用者已經手動建立了同 email 的帳號,它會自動關聯起來。
    • 點擊 Finish (完成)。
  7. 將google掛載到頁面登入選項
    • 進入 Admin Interface (管理員介面)。
    • 在左側選單找到 Flows and Stages (流程與階段) -> Stages (階段)。
    • 在搜尋框輸入 default-authentication-identification
      • 這是系統預設用來顯示「輸入帳號密碼」畫面的元件。
    • 找到後,點擊最右側的 編輯 (Edit / 筆形圖示)。
    • 在彈出的編輯視窗中,往下捲找到 Sources setting 這個欄位。
    • 您應該會看到剛剛建立的 Google 出現在清單中。
    • 請點擊選取它(如果原本是空的,代表什麼都不顯示;選取後它就會出現)。
      • 小技巧:按住 Ctrl (Win) 或 Command (Mac) 可以多選。
    • 按下 Update (更新)。
  8. 測試登入:
    • 開啟一個無痕視窗,前往你的 Authentik 網址。
    • 你應該會看到 Google 的登入按鈕。
    • 點擊它,使用你剛剛加入測試使用者清單的 Gmail 登入。
    • 如果一切順利,你應該會成功登入到 Authentik。

Reference#

Official docs:

authentik