Hydra による OAuth 2.0 の認可サーバー/ OIDC の IdP の実装イメージ
Hydra とは
以下 README.md の引用です。
ORY Hydra is a hardened, OpenID Certified OAuth 2.0 Server and OpenID Connect Provider optimized for low-latency, high throughput, and low resource consumption. ORY Hydra is not an identity provider (user sign up, user login, password reset flow), but connects to your existing identity provider through a login and consent app. Implementing the login and consent app in a different language is easy, and exemplary consent apps (Node) and SDKs for all common languages are provided.
ざっと触ってみたところ、ユーザーとのインタラクションは提供せず、自前で実装した認証やユーザー管理を行うサービスと連携して、OIDC/OAuth 2.0 の機能だけを提供するための製品のようです。
Hydra が提供する(しない)機能
Hydra は以下のようなエンドポイントを提供します。
- クライアントの作成や削除、取得
- 認可エンドポイント、トークンエンドポイント、Revokation、Introspection、ディスカバリや JWK 関連など
- ログインや同意を行うサーバーと連携するためのエンドポイント
逆に以下のような機能や API は提供していません。
- Hydra 自身はログインや同意を行うための画面を提供しない
- Hydra 自身はトークン以外にユーザーの情報を管理しない
- それに関連する API も提供しない
実装イメージ
Hydra が提供しているチュートリアルでは、以下のエンドポイントを持ったサーバーが立ち上がります。
- ログインと同意画面を提供するサーバー: 3000
- Hydra: 4444
- クライアント: 5555
チュートリアルで構築される環境では、以下のような流れでクライアントがトークンを取得します。
大雑把な流れは以下となります。
- クライアントから Hydra に遷移
- Hydra から ログインサーバーにリダイレクト
- ログインサーバーでユーザーを認証し、Hydra にリダイレクト
- Hydra から 同意サーバーにリダイレクト
- 同意サーバーでユーザーの同意をとったら Hydra にリダイレクト
- Hydra から クライアントにトークンを渡す
上記の通り、ログイン処理(ID/PWによる認証)や同意を取得する処理には Hydra は関わりません。
代わりに別途実装したログイン処理によるログインの結果と、認証を行ったユーザーの ID を API で Hydra に通知します。(同意についても似たような流れになります)
チュートリアルでは ID/PW による認証でしたが、Hydra が意識するのは認証後の API のみなので例えば MFA を追加したり、WebAuthn によるパスワードレス認証を実装したり、といったことも可能です。
認証処理そのものが Hydra から分離されているため、既存のログイン機能があるサービスからトークンを払い出す際にも有用かもしれません。
まとめ
- Hydra はサービスと連携して、OIDC/OAuth 2.0 の IdP /認可サーバーを実装するための製品です
- Hydraはクライアントやトークンを管理しますが、ユーザー情報は管理しません
- ユーザーの管理やログイン、同意画面は自前で実装する必要があります
- 自前で実装したログインなどの処理が終わったら結果を Hydra の API で連携します
Discussion