セクション違い:
[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 の組み合わせ。
OP (IdP) のデバッグに必要なので、Relying Party (RP) サンプルを作り直し。
[2024-02] OpenID Connect 認証仕様の基礎である OAuth 2.0 認可 (認証にあらず) フレームワークについて、改定作業が行われている. The OAuth 2.1 Authorization Framework Internet-Draft. Implicit Flow は単に削除された。
OAuth 2.1 世代では "public clients" も Authorization Code Flow でカバーしなければならず、Mobile & Desktop Apps では nonce
必須, PKCE 必須。
code_verifier
を送信するとサーバがエラーを返す.
ネイティブアプリなど client_secret を安全に保存できない状況では, Implicit Flow を使わなければならない。
response_type
= id_token token
.
生の OAuth 2.0 の Implicit Flow を「認証」に使おうとすると、すごく巨大な穴が空く。OpenID Connect の Implicit Flow はその穴を塞いでいるので問題ない。しかし、巷の解説では混同しているものが非常に多い。
Azure AD のみ。
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: 本当は、スマフォの紛失に備えてリカバリ方法を用意しなければならないが、そこは手つかず。
rails7/facebook-login · main · netsphere / rails-examples · GitLab
Facebook ログイン, グラフAPI サンプル。
Ruby では 'fb_graph2' パッケージが有力だった。しかし, 依存する rack-oauth2 v2 の破壊的変更で動かなくなっている。さらに fb_graph2 が直接依存する httpclient も古すぎて, もはや使えない。
類似の Koala パッケージはメンテナンスが継続している。こちらを使った。
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).