2021/3/25(木)

驚くほどプログラミングとサーバーいじりが楽しくなって他のことが手につかなくなってしまったため、2日ほど日報を休んでしまった。


GiteaとCodiMDをKeyCloakと連携させることに成功した。

Giteaは本当にやるだけみたいな感じだった。

CodiMDで少し詰まった部分があって、単純にレルムのsamlエンドポイントをCMD_IDPSSOURLに指定しても上手くいかない。それは何故かと言うと、CodiMDはSAML認証のためにリダイレクトする際、「IdPから戻ってくるときはここにリダイレクトしてね」というSP側のURLを指定してくれないのだ。それで「無効なリダイレクトURLです」というエラーが出てしまう。

どうしたらいいかと言うと、「レルムの」samlエンドポイントではなく「レルムのクライアントの」samlエンドポイントを指定する。そしてそのクライアントに「戻るときはここ」というURLを設定する。要するにIdPからSPへの戻る場所の設定をKeyCloak側で行う。

具体的には、まずクライアント設定でIDP Initiated SSO URL Nameを設定する。例えば「mycodimd」などと設定すると、「https://keycloak.example.com/auth/realms/myrealm/protocol/saml/clients/mycodimd」といったようなURLが出てくる。これをCodiMDのCMD_IDPSSOURLに設定する。レルムのsamlエンドポイントに「/clients/mycodimd」という部分がくっついていて、このエンドポイントを使うとどのクライアントを利用するSPなのかが明確になる。

次にBase URLの設定で「https://(codimdのドメイン)/auth/saml/callback」を指定する。これでIdPであるKeyCloakはSPに戻すときにどこへ戻せば良いのかが分かるようになる。

これを調べるのに大分骨を折った。最終的にこんな記事に辿り着いて、そこのコードをよく読んだ結果解決した。それにしてもこの記事、欲張りセット過ぎる。

それから今までKeyCloakのJavaScript Mapperの使い方が全く分からなかったのだが、StackOverflowにそのものずばりの回答があったので完全に理解した。exportsという変数に適宜文字列を代入すれば何とかなるらしい。

userから取得したfirstNameとlastNameを繋いで本名の文字列を出力するMapperが作れたりとかして大変感動した。

色々実験した結果、件の記事に書いてある方法でjava.util.ArrayListの配列オブジェクトをexportsに入れて出せば配列が出力できることが分かった。これを利用してユーザのGroup Listをちょっと加工して出力するMapperとかも作ることができる。残念ながらこの配列オブジェクトはfor ofとかは使えないらしい。javascriptの配列オブジェクトとは別物だからだろう。この辺は不便だ。あと全体的にconstとかテンプレートリテラルとかも使えない。javascriptのバージョン系の話には疎いので良く分からないが、多分古いやつで新しい機能が使えなかったりするんだろう。このようにちょいちょい不便なのと、ドキュメントが大分弱いのが欠点ではあるが、情報を加工して出す方法が分かっただけで大分楽しかった。

その内まとめて出したい。


最近プチ断食のような、あまり食べない生活をしている。なんか心が落ち着いている。というか、今まで「3食何かしら食べないと健康じゃない」「何か食べなければいけない」「何を食べるか考えないといけない」ということが重石になっていた気がする。別に拒食でもなんでもないし他人の作った食事は喜んで食べるのだけど、何を食べるか考えることは自分にとってかなり面倒なことなのだ。今の食生活が栄養的に健康かどうかは置いておいて、「面倒なら無理して食べなくても良い」「食べないことでいいこともある」というメンタルを身に付けたことは良いことかもしれない。

まあ、家族が作ってくれる食事が無かったら本格的に栄養がおかしなことになりそうなのでその内ちゃんと時間とって考えた方が良い気はする。料理を楽しめる性質だったら色々と便利なんだが。

Categories: