↓ メインコンテンツへスキップ

セルフホストしているサービスをPocket IDで認証するようにした

·1189 文字·3 分

爆破されたMisskeyサーバー以外にも、 私は複数のサービスをセルフホストしているのですが、数が増えるにつれて各サービスのid/passを毎回入力するのが面倒になってきました。特にGoogle Chromeを使っている時、パスワードマネージャーの仕様でログインしたいサービス以外のid/passが出てくることが多く、非常にストレスでした。

セルフホストしている・SSOしたいサービス
#

  • ownCloud Infinite Scale (ocis)
  • Cloudreve
  • Gitea
  • Cloudflare Access
  • Komodo

このうちOIDCでのSSOをするにあたって障壁となるものはocisとCloudreveです。ocisはOIDCでのSSOの癖が強く、後述しますが大抵のIdPは使えません。CloudreveはOIDCが無料版では開放されておらず、今回は代替品を自作することにしました。

GiteaとCloudflare Access、Komodoは特に癖もなく、普通に設定できました。

IdPの選定
#

最初は適当なOIDCプロバイダーになれるIDaaSにでも登録すればいいと考えていましたが、ocisのOIDCが要求する機能や制約によって実現しませんでした。

ocisの要求
#

ocisはIdPにDCRまたはクライアントが指定したclient_idの登録を要求します。普通client_idはIdPが発行し、クライアントに設定する運用が多く、クライアントが指定したidをサーバーに設定することを想定しているIdPは多くはありません。ocisでもSSOするべくいくつか探したことはありますが、結局Keycloakをセルフホストした方が早く、なかなか実現には至りませんでした。

DCRをサポートするIdPは多いですが、ocisのiOSクライアントと相性が悪く、途中で諦めてしまったのでよくわかりません。


Keycloakのセルフホストはやはり重たい印象があり、IdPだけやっすいVPSとかで動かしたかったので今回は除外。まぁどうせ1ユーザーなので無理やり動かすこともできたでしょう。


そんな中でPocket IDを発見しました。Pocket IDは任意のclient_idをクライアント作成時に指定できます。また、Pocket IDのドキュメントにocisでの設定方法の記載があり、動作確認が取れていることもGood Pointです。

また、ocisのフォークであるOpenCloudにPocket IDによるSSOを設定した日本語記事があったのでまぁなんとかなるやろの気持ちが湧いてきたこともあります。結局やる気次第

Pocket IDについて
#

Pocket ID | Easy Self-Hosted OIDC Provider with Passkeys

Pocket IDはコンパクトなIdPで、パスキーによる認証のみをサポートします。パスキーは色々言われますが結局自分しか使わないので自分がいいならそれでokということで採用

シンプルですが意外と機能は多く、ユーザーグループをこねくり回すことでいい感じにSSO先サービスとのマッピングを行えます。