bugs:
response から email が drop する。ユーザの承諾の保存辺りが不味そうfixed.
●●未了
registration_endpoint
動的な登録の再実装end_session_endpoint
シングルログアウト (SLO) の実装"refresh_token"
grant type. トークン有効期限の延長.
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).
- Ruby on Rails v7.2
fb_graph2廃れた. Koala によるサンプル; https://gitlab.com/netsphere/rails-examples/-/tree/main/rails7/facebook-login/- sorcery ※認証フレームワークは何でもよい。
- openid_connect
This IdP does not use "omniauth-openid-connect" or "doorkeeper-openid_connect" gem.
To run this in development mode on your local machine:
-
Download (or fork or clone) this repo
-
bundle install
(see "Note" section below if you get "pg"-gem-related problems) -
config/database.yml.sample
ファイルをdatabase.yml
にコピーして、適宜編集。 -
Setup database
# su postgres $ createdb --owner DBユーザ名 --encoding utf-8 openid-connect-sample_dev
$ bin/rails db:migrate $ bin/rails db:seed
- Copy
config/connect/facebook.yml.sample
tofacebook.yml
. And Google's.
Set client_id
and client_secret
Sorcery による OpenID Connect Login, Facebook Login のサンプルを兼ねている。
-
Modify
config/connect/id_token/issuer.yml
-- changeissuer
value tohttp://localhost:4000
-
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
- Facebook または Google でログインする
Admin user としてログインする。払い出すユーザは "Fake Users" から確認できる。
- [Register New Client...] から, RPを登録する。
redirect_uri
は複数登録可能。
-
RP側で,
client_id
,client_secret
を登録する。 -
RP 側からログイン可能か確認する。 この IdP では、払い出すユーザを都度選択するようになっている。
Copyright (c) 2011 nov matake. See MIT-LICENSE
for details.
Copyright (c) 2020-2021,2024 Hisashi Horikawa.
This IdP:
- View source on GitHub: https://github.com/netsphere-labs/rails-openid-connect-idp-as/
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.
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.
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.
- 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.