Skip to content

Latest commit

 

History

History
178 lines (91 loc) · 5.04 KB

README.md

File metadata and controls

178 lines (91 loc) · 5.04 KB

bugs:

  • response から email が drop する。ユーザの承諾の保存辺りが不味そう fixed.

●●未了

  • registration_endpoint 動的な登録の再実装
  • end_session_endpoint シングルログアウト (SLO) の実装
  • "refresh_token" grant type. トークン有効期限の延長.

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

What's this?

A sample authorization server acting as an OpenID Connect identity provider (OP or IdP) using the openid_connect gem. The Authorization Code Flow with PKCE, the Implicit Flow and the Hybrid Flow are supported.

クライアントの開発のため、複数のユーザを切り替えて払い出す。デバッグのため、正常なレスポンスだけでなく、異常なレスポンスも返す。

See https://www.nslabs.jp/digital-identity.rhtml

PKCE に対応。検証に失敗するとクライアントに 次のエラーを返す:

invalid_grant :: The provided access grant is invalid, expired, or revoked (e.g. invalid assertion, expired authorization token, bad end-user password credentials, or mismatching authorization code and redirection URI).

How to Run

Requirements

This IdP does not use "omniauth-openid-connect" or "doorkeeper-openid_connect" gem.

Localhost

To run this in development mode on your local machine:

  1. Download (or fork or clone) this repo

  2. bundle install (see "Note" section below if you get "pg"-gem-related problems)

  3. config/database.yml.sample ファイルを database.yml にコピーして、適宜編集。

  4. Setup database

  # su postgres
  $ createdb --owner DBユーザ名 --encoding utf-8 openid-connect-sample_dev
  $ bin/rails db:migrate
  $ bin/rails db:seed
  1. Copy config/connect/facebook.yml.sample to facebook.yml. And Google's.

Set client_id and client_secret Sorcery による OpenID Connect Login, Facebook Login のサンプルを兼ねている。

  1. Modify config/connect/id_token/issuer.yml -- change issuer value to http://localhost:4000

  2. Run!

  $ bin/rails assets:precompile
  $ bundle exec rails server -p 3000

production 環境の場合は, 次のようにしてコンパイルする。

  $ RAILS_ENV=production bin/rails assets:precompile

次のようなシェルスクリプトを作る

export g_client_id=クライアントid
export g_client_secret=クライアントsecret
RAILS_ENV=production passenger start

使い方

  1. Facebook または Google でログインする

Admin user としてログインする。払い出すユーザは "Fake Users" から確認できる。

  1. [Register New Client...] から, RPを登録する。

redirect_uri は複数登録可能。

  1. RP側で, client_id, client_secret を登録する。

  2. RP 側からログイン可能か確認する。 この IdP では、払い出すユーザを都度選択するようになっている。

Copyright

Copyright (c) 2011 nov matake. See MIT-LICENSE for details.

Copyright (c) 2020-2021,2024 Hisashi Horikawa.

Resources

This IdP:

For more information, see readme and wiki for openid_connect gem:

OAuth 2.0 server library:

Also of interest, the corresponding sample RP:

  • Rails OpenID Connect RP Sample the Authorization Code Flow, the Implicit Flow. And, Single Logout (SLO) based on OpenID Connect RP-Initiated Logout 1.0.

Topic: OpenSSL v3.0 (Fedora 36, CentOS Stream 9)

openid_connect gem が依存する json-jwt 1.13.0 で次のエラーが発生. OpenSSL::PKey::PKeyError 型.

rsa#set_key= is incompatible with OpenSSL 3.0

OpenSSL の仕様変更により ruby/openssl v3.0 のいくつかのメソッドが取り除かれた。とはいえ、Ruby v2.x のときからそれらのメソッドは非推奨 deprecated になっており、しかも OpenSSL v3.0 との組み合わせでは動かない。

関連 issue: Add OpenSSL 3 support · Issue #100 · nov/json-jwt

Obviously, external servers will not be able to connect to an OP that is running on localhost.

On a public server

To run it on a public server, the steps are the same as for localhost, except you will set issuer in the issuer.yml config file to your domain name.

Notes

  • The Gemfile includes gem 'pg' (for PostgreSQL), but you can remove it. Nov uses PostgreSQL for his Heroku deployment, but the default DB configs are all SQLite.
  • The Facebook link won't work unless you register your app with them.