2025年9月18日木曜日

Gitlab で LDAP のログインテストをスクリプトから行う

Gitlab で LDAP のログインテストをスクリプトから行う

概要

過去に CLI を使った方法を紹介しました
CLI の場合 Gitlab インスタンスに ssh が必要なのと接続チェックしか行えないので実際のログインまでのテストはできません

今回は実際にログインするテストを ssh なしで実装してみました
UI と同じリクエストを Python スクリプトから送信すれば OK です

環境

  • Gitlab 18.1.6
  • Python 3.12.11
    • requests 2.32.5
    • beautifulsoup4 4.13.5

サンプルコード

import requests
from bs4 import BeautifulSoup

# GitLab の URL
GITLAB_URL = "https://your-gitlab-fqdn"

# LDAP ユーザーの資格情報
USERNAME = "hawk"
PASSWORD = "xxxxxxxx"
LDAP_NAME = "ldapserver01"


def test_ldap_login():
    # セッションを作成
    session = requests.Session()

    # ログインページにアクセスして CSRF トークンを取得
    login_page = session.get(f"{GITLAB_URL}/users/sign_in")
    if login_page.status_code != 200:
        print("ログインページへのアクセスに失敗しました。")
        return

    # CSRF トークンを取得
    soup = BeautifulSoup(login_page.text, "html.parser")
    element = soup.find("input", {"name": "authenticity_token"})
    if element is None:
        print("authenticity_tokenが見つかりませんでした。")
        return
    csrf_token = element["value"]  # type: ignore

    # ログインデータを準備
    login_data = {
        "username": USERNAME,
        "password": PASSWORD,
        "authenticity_token": csrf_token,
    }

    # ログインリクエストを送信
    response = session.post(
        f"{GITLAB_URL}/users/auth/{LDAP_NAME}/callback",
        data=login_data,
    )

    # レスポンスを確認
    if response.status_code == 200 and "Invalid Login or password" not in response.text:
        if "Welcome to GitLab" in response.text:
            print("LDAP ログインテストが成功しました。")
        else:
            print("LDAP ログインテストに失敗しました。")
            print("レスポンスに 'Welcome to GitLab' が含まれていません。")
    else:
        print("LDAP ログインテストに失敗しました。")
        print("ステータスコード:", response.status_code)
        print("レスポンス:", response.text)


if __name__ == "__main__":
    test_ldap_login()

少し解説

LDAP_NAME の部分は gitlab.rb に設定した ldap_name を設定してください
クロスサイト対策として CSRF トークンが必要になるのでそれをページから取得しリクエストに含める必要があります

Gitlab の API はなく直接 UI ページにアクセスして UI のフォームと同じリクエストを送信している感じです

最後に

これで LDAP のログインテストも ssh せずにテストできます

0 件のコメント:

コメントを投稿