omniauth-openid-connect 'renewed'

OmniAuth (Ruby) 用の OpenID Connect ストラテジ。このパッケージは 'omniauth-google-oauth2', 'omniauth-yahoojp' およひ 'omniauth-azure-oauth2' を置き換えます。

オリジナルはこちら; omniauth-openid-connect | RubyGems.org. しかしながら, 2019年1月現在, 最新は 2015年12月にリリースされた v0.2.3. もはやメンテナンスされていない。

依存している openid_connect パッケージが古く、困る。多くの人が fork してしまっている。

そこで、多くの人による散らばった修正を取り込んだ。決定打を目指す。

GitHub repository: hhorikawa/omniauth-openid-connect: Universal authentication strategy using OpenID Connect for OmniAuth

OpenID Connect

OpenID Connect は, OAuth 2.0仕様の上に構築された認証 (authentication) 手順。認可 (authorization) とは異なる。

ただの OAuth 2.0 を「認証」に使おうとすると、セキュリティ上よくない。例えば, 単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる | @_Nat Zone OAuth 2.0 の implicit flow を使って「認証」をしようとすると、とっても大きな穴が開きます。カット & ペースト攻撃が可能だからです。

各社が OAuth 2.0 の上に独自に認証の仕組みを作っていた。これでは困るので, 標準化したものが OpenID Connect. 'OpenID 2.0' (OpenID Authentication 2.0) からの技術的な連続性はない。名前だけ。紛らわしい。

OpenID Connect に対応した認証サービス (OpenID Provider; OP) は、例えば、次がある;

組織 サービス Basic OP Implicit OP Hybrid OP
Google Google Federated Identity
Microsoft ADFS on Windows Server 2016 --
Microsoft Azure Active Directory v2 --
PayPal Login with PayPal ※下コメント参照.
Salesforce Summer 2015 Release
Yahoo! Japan Yahoo! ID Federation v2

リストはこちら; OpenID Certification. Facebook がないのがつらい。引き続き独自の方法で対応が必要。

Salesforce は, 実際に試せてはいないが, この辺りの記事を見ると OP になれるようだ; シングルログアウト用の OpenID Connect 設定 (Salesforce が OpenID Connect プロバイダの場合) | シングルサインオン実装ガイド

(2017.9.23) このほか, gitlab.com も OpenID Provider のつもりだが, jwks_uri で得られるRSA公開鍵が不味く, 適合していない。

PayPal

(2017.8.20 追記)

上のリストで PayPal も OpenID Connect に対応していることになっているが、実装を確認する限り、OpenID Connect には適合していない。

amazon web services - Using Login with Paypal and using OpenID with AWS Cognito - Stack Overflow

oauth 2.0 - PayPal id_token verification - Stack Overflow

いろいろ試してみたが、access_token と別に id_token を取得することができなかった。

Installation

Requirements

  • Ruby 2.2 or later
  • omniauth ~> 1.6
  • openid_connect ~> 1.1

Download

リポジトリをclone してください。

$ git clone https://github.com/hhorikawa/omniauth-openid-connect.git

ビルド、インストール。

$ rake build
# rake install:local

Usage

設定方法, リファレンス

OpenID Provider (OP; IdP) ごとの設定例

OpenID Connect 'response_type' and flows

openid_connect_sample

テストのために, nov/openid_connect_sample を Ruby on Rails 4.2対応にしたものを用意した。

'openid_connect' パッケージのバグ修正を含む。

Links

OAuth 2.0 + OpenID Connect のフルスクラッチ実装者が知見を語る OpenID Provider (OP; IdP) を作るのは、非常に難しい。

OpenID Connectで異なるドメイン間のログインセッション不整合を防ぐ方法 - r-weblife シングルログアウト.

Just In Time Provisioning / Identity Provisioning

エンタープライズITでのOpenID Connect利用ガイドライン