delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

2025-01-01から1ヶ月間の記事一覧

PythonのKeycloakライブラリ「Python Keycloak」でAdmin REST APIを叩いてみる

概要 Keycloakには「Admin REST API」というREST APIが存在する Keycloak Admin REST API ただしアクセスするためには以下の2段階のフローが必要で使うのがやや面倒くさい仕様である 1:トークン発行APIに問い合わせてアクセストークンを取得する 2:アクセス…

ChatGPTにindex.htmlペラ1のSQL整形ツール(WASM x Python)を作ってもらった

概要 ChatGPTに自分用のSQL整形ツールを作ってもらった。 GitHub Pagesで公開している。 delhi09.github.io コード github.com 背景 いまだにいいSQL整形ツールを見つけられていない ※ 自分が求めるいいSQL整形ツール どんな環境でも実行できる 設定なしでよ…

生成AI(OpenAI)にある物語作品を換骨奪胎した別の物語作品を創ってもらう試み

概要 ある既存の物語作品をベースとして、与えた設定を加味して別の物語作品のあらすじを創る(=換骨奪胎)ということを生成AI(OpenAI)にやらせてみた。今回は「銀河鉄道の夜」を題材としている。 www.aozora.gr.jp 背景 前提として、物語の抽象的な構造を分析…

Keycloak x django-allauthのOIDC認証にPKCEを追加する

概要 以下の記事などでKeycloak x django-allauthでの基本的なOIDC認証は検証できた。 kamatimaru.hatenablog.com 今回はOIDCで推奨されているセキュリティ対策の仕組みであるPKCEを追加してみる。 PKCE自体については巷に以下のような解説記事がたくさんあ…

django-allauthでOIDCのアクセストークンを取得する②

概要 以下の記事の続き。 kamatimaru.hatenablog.com なぜかアクセストークンでKeycloakのUserinfoエンドポイントを叩いた場合 HTTPスタータスコードは200 コンテンツが0バイト という結果になってしまったのでデバッグする。 結論 以下のコマンドで取得でき…

django-allauthでOIDCのアクセストークンを取得する①

概要 OIDCで認証した後、ロジック上の任意の箇所でアクセストークンを取得する方法を調べた。 やり方 まずはsettings.pyにSOCIALACCOUNT_STORE_TOKENSという設定値をTrueに設定する。 ※ デフォルトはFalse settings.py # ...省略 SOCIALACCOUNT_STORE_TOKENS…

django-allauthでUserの保存処理をカスタマイズする

概要 実際のアプリケーションでdjango-allauthを使用する際には、User保存処理をカスタマイズしたくなると思うので、その方法を調べていく。 以下の記事の流れでKeycloakを使ったOIDC認証を前提とする。 kamatimaru.hatenablog.com 準備 Djangoの公式ドキュ…

django-allauthでOIDC認証した際のDjango側のデータの持ち方について調べた

概要 以下の記事を参考にさせて頂きながら、Keycloak x django-allauthでのOIDC認証を検証していた。 ryu22e.org OIDC認証で認証成功した際に、django-allauthがDjangoの組み込みのユーザーモデルなどにデータをどのように保存するのか気になったので、実際…

django-allauthでOIDCログイン失敗の原因をデバッグするtips

課題 Keycloak x django-allauthでOIDCの認証を検証して時に、以下のような認証エラー画面が表示された。 OIDCのフローの赤枠で囲った部分(=Keycloakのログインには成功してリダイレクトでDjangoのredirect_uriにコールバックされてきたところ)で発生してい…

Docker Compose環境でKeycloakの前段にリバースプロキシサーバーを立てる(Nginx、Caddyで検証)

前提 アクセスログを取得したいなどの理由で、docker compose環境でKeycloakの前段にリバースプロキシサーバーを立てたくなった 使用したKeycloakのDockerイメージ: quay.io/keycloak/keycloak:26.0.6 まずはNginx まずは使い慣れているNginxでやろうとした…

【業務効率化】自作のreStructuredTextのリンクを作成するコマンド

概要 仕事でMarkdownではなくreStructuredTextで形式でリンクを書かないといけない時がある。 その際に、慣れてなくていつもドキュメントを見に行くか既存の他のリンクをコピるということをやってて時間がかかっていたので、コマンドで生成できるようにした…

勉強のためにOpen ID ConnectのIDプロバイダー側をDjangoで実装する⑩

以下の続き kamatimaru.hatenablog.com Userinfoエンドポイント Userinfoエンドポイントを実装する。 アクセストークンの永続化 Userinfoエンドポイントのリクエストにアクセストークンを使うので、まずはトークンエンドポイントで発行するアクセストークン…

勉強のためにOpen ID ConnectのIDプロバイダー側をDjangoで実装する⑨

以下の続き kamatimaru.hatenablog.com 公開鍵をRPに提供するエンドポイント 公開鍵をRPに提供するエンドポイントを実装する。「JWKsエンドポイント」というらしい。 developer.yahoo.co.jp RFC7517に仕様が存在するとのこと。 datatracker.ietf.org ディス…

勉強のためにOpen ID ConnectのIDプロバイダー側をDjangoで実装する⑧

以下の続き kamatimaru.hatenablog.com トークンエンドポイント 前提知識の確認 IDトークンはJWT(JSON Web Token)形式であることが仕様で決まっている。 https://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html#IDToken ID Token は JS…

勉強のためにOpen ID ConnectのIDプロバイダー側をDjangoで実装する⑦

以下の続き kamatimaru.hatenablog.com トークンエンドポイント 認可コードにユーザー情報を紐づける IDトークンの作成を実装していく。 IDトークンにはユーザー情報を含めるので、まずは認可コードにユーザー情報を紐づける必要がある。 同意画面のPOST処理…