omniauth-openid-connect 'renewed'

OmniAuth (Ruby) 用の OpenID Connect ストラテジ。このパッケージは次のパッケージを置き換えます。

  • omniauth-google-oauth2
  • omniauth-yahoojp
  • omniauth-azure-oauth2
  • omniauth-azure-adv2
  • omniauth-line
  • omniauth-line-openid-connect
  • omniauth-salesforce

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

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

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

GitHub repository: netsphere-labs/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/netsphere-labs/omniauth-openid-connect.git

ビルド、インストール。

$ rake build
# rake install:local

Usage

設定方法, リファレンス

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

A sample Rails + OmniAuth program: omniauth-oidc-rp-sample · main · netsphere / rails-examples · GitLab

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