認証関係: サンプルプログラム

セクション違い:

Rails OpenID Connect IdP AS (former OpenID Connect OP Sample)

[2021-12] v2.0.0 リリース.

[2024-07] v3.0.0: Authorization Code Flow with PKCE.

OpenID Connect OP (IdP) 実装サンプル。nov/openid_connect_sample を fork し, Ruby on Rails 6.1対応した。Authorization Code Flow, Implicit Flow と Hybrid Flow をサポート。

同時に, OpenID Connect Relying Party (RP) として Googleログイン。

Ruby on Rails 6.1, Sorcery, Facebook Login の組み合わせ。

An OpenID Connect (oidc) Relying Party (RP) sample

netsphere-labs/openid-connect-implicit-flow-rp-sample: An OpenID Connect (oidc) Relying Party (RP) sample. Ruby 3 + Ruby on Rails 6.1. Tested Google and Yahoo JP.

OP (IdP) のデバッグに必要なので、Relying Party (RP) サンプルを作り直し。

  • Ruby 3, Rails 6.1.
  • IdP として Google, Yahoo! JP, Azure AD と上記 Rails OpenID Connect IdP AS に対応。

[2024-02] OpenID Connect 認証仕様の基礎である OAuth 2.0 認可 (認証にあらず) フレームワークについて、改定作業が行われている. The OAuth 2.1 Authorization Framework Internet-Draft. Implicit Flow は単に削除された。

Authorization Code Flow with PKCE

OAuth 2.1 世代では "public clients" も Authorization Code Flow でカバーしなければならず、Mobile & Desktop Apps では nonce 必須, PKCE 必須。

  • Google PKCE も実装ずみ。誤った code_verifier を送信するとサーバがエラーを返す.
  • 上記 Rails OpenID Connect IdP AS: PKCE 実装ずみ。
  • それ以外 ●●未了

Implicit Flow

ネイティブアプリなど client_secret を安全に保存できない状況では, Implicit Flow を使わなければならない。

response_type = id_token token.

生の OAuth 2.0 の Implicit Flow を「認証」に使おうとすると、すごく巨大な穴が空く。OpenID Connect の Implicit Flow はその穴を塞いでいるので問題ない。しかし、巷の解説では混同しているものが非常に多い。

OpenID Connect RP-Initiated Logout 1.0 によるシングルログアウト (SLO)

Azure AD のみ。

Sorcery 2FA Sample

netsphere-labs/sorcery_twofactor_sample: Sorcery 2FA sample. Rails 7

ベーシックなパスワード認証と Google Authenticator (Google 認証システム) で生成される確認コードの入力を組み合わせた、2要素認証のサンプル。

二要素認証 (2FA) は, "知識" 本人のみが知っていること (例: 暗証番号) と, "所有" 本人が持っているもの (例: スマフォ) を組み合わせた認証。所有のほうは、それだけでは本人確認にならないので、あくまでも「知識」を補完する位置づけ。例えば、パスワードをほかのサービスと共通のものを使っているような場合で、それが漏洩したとしても、ただちに破られないようにする。

二段階認証とは異なることに注意。

Google Authenticator を使うこのサンプルは, SMS (ショートメッセージ) よりも, 非常に実装が簡単。Ruby 3.1, Ruby on Rails 7, Sorcery, google-authenticator-rails の組み合わせ.

● TODO: 本当は、スマフォの紛失に備えてリカバリ方法を用意しなければならないが、そこは手つかず。

Facebook Login

rails7/facebook-login · main · netsphere / rails-examples · GitLab

Facebook ログイン, グラフAPI サンプル。

Ruby では 'fb_graph2' パッケージが有力だった。しかし, 依存する rack-oauth2 v2 の破壊的変更で動かなくなっている。さらに fb_graph2 が直接依存する httpclient も古すぎて, もはや使えない。

類似の Koala パッケージはメンテナンスが継続している。こちらを使った。

[historical] rails-omniauth-oidc-rp-sample

netsphere / rails-omniauth-oidc-rp-sample · GitLab

OmniAuth2 を使ったサンプル。OmniAuth はメジャーだが、OpenID Connect を使うなら屋上屋になる。使うべきでない。

(1) OpenID Connect Authorization Code Flow によるログイン, (2) 同 Implicit Flow によるログイン. (3) OpenID Connect RP-Initiated Logout 1.0 によるシングルログアウト (SLO).