Skip to main content

Unified Python client for Kyoto University SSO services (KULASIS / KULMS / MyKULINE / PandA).

Project description

kuauth

PyPI version Python License: MIT Live integration Context7 Indexed Context7 llms.txt

京都大学の SSO (KULASIS / KULMS / MyKULINE / PandA) を単一のセッションで 叩くための Python クライアント。初回の get() / post() 時に必要な IdP ウォークが遅延実行され、それ以降は通常の HTTP クライアントとして使える。

インストール

uv add kuauth

Quickstart

from kuauth import KyotoUAuth, KULASIS, KULMS, MyKULINE, PandA

auth = KyotoUAuth(
    username="a0XXXXXX",
    password="your-password",
    # onetime_password="424242",             # 手元の 6 桁コードを 1 回だけ使う
    otp_callback=lambda: input("OTP: "),     # 対話的スクリプト
    # totp_secret="JBSWY3DPEHPK3PXP",        # cron / CI など無人実行
)

print(KULASIS(auth).get("/student/u/t/top").text)           # 教務 (Shift_JIS 自動デコード)
print(KULMS(auth).get("/portal").text)                      # Sakai LMS
print(MyKULINE(auth).get("/opac/opac_search/").text)        # 図書館 OPAC
print(PandA(auth).get("/portal").text)                      # 旧 LMS (ECS CAS)

auth.close()

認証方法

OTP が必要かどうかはアクセスする SP によって変わる:

Service Base URL 認証経路 OTP
KULASIS https://www.k.kyoto-u.ac.jp auth.iimc (SimpleSAMLphp) 必要
KULMS https://lms.gakusei.kyoto-u.ac.jp auth.iimc (SimpleSAMLphp) 必要
MyKULINE https://kuline.kulib.kyoto-u.ac.jp authidp1 (Java Shib IdP) 不要
PandA https://panda.ecs.kyoto-u.ac.jp ECS CAS 不要

OTP は実際に OTP フォームに到達した時点で初めて解決される。つまり MyKULINE や PandA しか使わないスクリプトでは totp_secret 等の指定は 省略できる。KULASIS / KULMS を叩く場合のみ、下記のいずれかを渡す:

引数 用途
onetime_password="424242" 手元の 6 桁コードを 1 回だけ使う
otp_callback=lambda: input("OTP: ") 対話的スクリプト
totp_secret="JBSWY3DPEHPK3PXP" cron / CI など無人実行

TOTP シークレットは京大の多要素認証マニュアル に従って認証アプリを登録する際の QR に埋め込まれた otpauth://totp/...?secret=XXXX&...secret パラメータ。登録後は QR が再表示されないので、登録画面で控えておくか、 一度アプリを解除して再登録する。

KUMOI (Microsoft 365) はテナント admin consent 要でスコープ外。

個別エンドポイントのラッパメソッドは持たない設計。HAR ファイルから URL と フォーム構造を特定すれば、KULASIS(auth).post(...) などを使って呼び出し側で 任意のページを叩ける。

テスト

uv run pytest tests/unit -q      # ネットワーク不要
uv run pytest tests/replay -q    # respx でモックした E2E

実 IdP と実サービスを叩く統合テストは KUAUTH_LIVE=1 を指定しない限り すべて skip される。実行するには以下の環境変数をセットする:

KUAUTH_TOTP_SECRET は KULASIS / KULMS のテストに必要で、省略すると auth_with_totp を使うテストだけが skip される (MyKULINE / PandA は走る)。

# bash / Git Bash
KUAUTH_LIVE=1 \
  KUAUTH_USERNAME=a0XXXXXX \
  KUAUTH_PASSWORD=... \
  KUAUTH_TOTP_SECRET=JBSWY3DPEHPK3PXP \
  uv run pytest tests/integration -q
# PowerShell
$env:KUAUTH_LIVE="1"
$env:KUAUTH_USERNAME="a0XXXXXX"
$env:KUAUTH_PASSWORD="..."
$env:KUAUTH_TOTP_SECRET="JBSWY3DPEHPK3PXP"
uv run pytest tests/integration -q

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kuauth-0.2.0.tar.gz (43.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kuauth-0.2.0-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file kuauth-0.2.0.tar.gz.

File metadata

  • Download URL: kuauth-0.2.0.tar.gz
  • Upload date:
  • Size: 43.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.12

File hashes

Hashes for kuauth-0.2.0.tar.gz
Algorithm Hash digest
SHA256 82c8f990099b4c72155f0a423982c1cfaf47a761145b447acf3d62a5345fd1a2
MD5 0f7171a8d7844765a204273f59d2eb57
BLAKE2b-256 112553845b3d3cb5601c172745089e9e60edf92e8c19d5a283eb337dfe50eb24

See more details on using hashes here.

File details

Details for the file kuauth-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: kuauth-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.12

File hashes

Hashes for kuauth-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5763177f82caf7e48f2b7bd52ca36fe8ddea32d06969475d5517f2eba3215b5e
MD5 7e1f5e5a5436e5ffa335993931569c93
BLAKE2b-256 72be35ee90d362b5ba4836ab00bd854b1d750a09fdb1fc9b71af478a402cb875

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page