💋

Hydra による OAuth 2.0 の認可サーバー/ OIDC の IdP の実装イメージ

2021/07/26に公開

Hydra とは

https://github.com/ory/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

チュートリアルで構築される環境では、以下のような流れでクライアントがトークンを取得します。

大雑把な流れは以下となります。

  1. クライアントから Hydra に遷移
  2. Hydra から ログインサーバーにリダイレクト
  3. ログインサーバーでユーザーを認証し、Hydra にリダイレクト
  4. Hydra から 同意サーバーにリダイレクト
  5. 同意サーバーでユーザーの同意をとったら Hydra にリダイレクト
  6. Hydra から クライアントにトークンを渡す

上記の通り、ログイン処理(ID/PWによる認証)や同意を取得する処理には Hydra は関わりません。
代わりに別途実装したログイン処理によるログインの結果と、認証を行ったユーザーの ID を API で Hydra に通知します。(同意についても似たような流れになります)

チュートリアルでは ID/PW による認証でしたが、Hydra が意識するのは認証後の API のみなので例えば MFA を追加したり、WebAuthn によるパスワードレス認証を実装したり、といったことも可能です。
認証処理そのものが Hydra から分離されているため、既存のログイン機能があるサービスからトークンを払い出す際にも有用かもしれません。

まとめ

  • Hydra はサービスと連携して、OIDC/OAuth 2.0 の IdP /認可サーバーを実装するための製品です
  • Hydraはクライアントやトークンを管理しますが、ユーザー情報は管理しません
  • ユーザーの管理やログイン、同意画面は自前で実装する必要があります
  • 自前で実装したログインなどの処理が終わったら結果を Hydra の API で連携します

参考資料

GitHubで編集を提案

Discussion