SVX日記
2024-07-13(Sat) SSOのOSSでSOS
認証にはあまり興味がないのだが、DKIMだの、Sinatraへ追加だの、S/MIMEだの、OAuth2.0だの、意外とアレコレと取り組んでいる。まぁSSOはユーザの負担を軽減するための妥当な仕組みであるし、悪いのものではないよな……と、調べ始めるといろいろ出てくる新事実。
- mod_auth_mellonはApacheをSAMLに対応させるためのクライアントモジュール
- SAMLはSecurity Assertion Markup LanguageというSSOのオープンな規格
- SAMLはクライアント/サーバの形であり、サーバ側が認証を司る
- サーバ側で一度認証すれば、すべてのクライアントでアクセス許可される
- 代表的なサーバは、商用サイト「OneLogin」や、OSSの「Keycloak」
そういやKeycloakってどこかで聞いたような名前だな。mod_auth_mellonを試すにはサーバが必要だが、Keycloakが使えるならそっちの味見もできて一石二鳥である。とりあえずKeycloakをコンテナで上げてみる……
まぁ、概念がわからない。ウェブ上に文書はあるが、読んでもわからん。Sinatraに実装して動かすのが目的なのだから、どうにか少しでも動かして、それを元に理解を進めたいのだが、にっちもさっちもよっちもごっちもろっちもしっちもはっちもくっちもじっちも動かない。
急がば回れと、OneLoginのお試しアカウントを作ってサーバを替えてみたり、mod_auth_mellonのハウツーを柄にもなく実直に辿ってみたりもした。結果mod_auth_mellonは動きはしたがそれだけだ。やっぱりわからん。
ここまでガッツリとハマったのは人生で初めてかもしれん。なにしろ、Keycloakのログイン画面に遷移しないのだ。Keycloakはエラーログを出すのだが、内容が具体的でないので、試行錯誤するほかない。ググると似たような感じでハマっている書き込みは見つかるものの、解決してそうに見えない。結局、秘密鍵や証明書の指定をアレコレしまくって、ようやくログイン画面にこぎ着けたが、今度はSAMLのライブラリがエラーを吐く。終いにはruby-samlのコードにデバッグ行を入れまくり、どうにかSinatra側に戻すところまで持ってきたが、なんだか設定が微妙すぎて、もう何が正しいのかわからない。
ログインができたらログアウトもできなければならない。そしてまたKeycloakのエラーログだ。意味不明……さすがにちょっとログの出し方がアホなんじゃないかと思い始める。またもや証明書の指定をアレコレしまくって、どうにか抜けたかと思ったら、またもやSAMLのライブラリがエラーを吐く。再びruby-samlのコードにデバッグ行を入れまくるが、限りなくバグくさいコードをアチラコチラに見つけてしまう……さすがにちょっとライブラリの品質もクソなんじゃないかと思い始める。