OpenID Connect Implicit Flow を実装したプロバイダのサンプルアプリケーションです。
http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html
$ git clone https://github.com/hiyosi/tiny-oidc-provider.git
$ cd tiny-oidc-provider
$ bundle install --path=vendor/bundle
- 鍵の生成
$ mkdir config/keys
$ cd config/keys
$ openssl genrsa 2048 > test.pem
- 設定値の指定 (以下サンプル)
# config/environments/development.rb
require './lib/oidc'
Rails.application.configure do
OIDC::Config.issuer = 'op.example.com'
OIDC::Config.scope = %w(openid profile email)
OIDC::Config.id_token_expire = 3600
OIDC::Config.rsa_key = './config/keys/test.pem'
end- Rails アプリケーションの起動
$ bundle exec rake db:migrate
$ bundle exec rails s
-
http://localhost:3000/applicationsにアクセスして RP を登録して下さい。 -
sign_in 画面にリダイレクトされるので、その画面から sign_up のリンクをクリックしユーザを登録して下さい。
-
ユーザ登録完了後、RP の登録ページに戻ると思いますので、自身のRPを登録して下さい。
このプロバイダでは以下のリクエストパラメータをサポートしています。
| パラメータ | 内容 |
|---|---|
| scope | [必須] openidを含むこと。openid,profile,email をサポート |
| response_type | [必須] id_tokenのみサポート。 |
| client_id | [必須] RPのクライアント識別子。 |
| redirect_uri | [必須] レスポンスが返されるリダイレクト先URI文字列。RP登録時のURI群のいずれかに完全一致する必要がある。 |
| state | [必須] CSRF対策の文字列。 |
| nonce | [必須] リプレイ攻撃対策の文字列。指定した文字列がIDトークンのnonceフィールドに格納される。 |
Authorization リクエストに成功すると、以下のパラメータがリダイレクトURLのフラグメントとして返されます。
| パラメータ | 内容 |
|---|---|
| token_type | Bearer固定 |
| id_token | IDトークン文字列。 |
| state | 認可リクエストでstateを指定していた場合のみ、その値が格納される。 |
このプロバイダ提供するIDトークンには、下記のクレームが含まれます。
| クレーム名 | 内容 |
|---|---|
| iss | IDトークンを発行したOPの識別子。文字列。 |
| sub | ユーザの識別子。 |
| aud | このIDトークンの発行対象の識別子の配列。 |
| exp | IDトークンが執行する時刻。整数値。 |
| iat | IDトークンが発行された時刻。整数値。 |
| nonce | [nonceを指定したリクエストの場合のみ] リプレイ攻撃対策として使われる文字列。 |
| name | [scopeにprofileを指定したリクエストの場合のみ] End-User の表示用フルネーム。 |
| given_name | [scopeにprofileを指定したリクエストの場合のみ] End-User の名 (given name / first name)。 |
| family_name | [scopeにprofileを指定したリクエストの場合のみ] End-User の姓 (surname / last name)。 |
| given_name_kana | [scopeにprofileを指定したリクエストの場合のみ] End-User の名(かな)。 |
| family_name_kana | [scopeにprofileを指定したリクエストの場合のみ] End-User の姓(かな)。 |
| gender | [scopeにprofileを指定したリクエストの場合のみ] End-User の性別。 |
[scopeにemailを指定したリクエストの場合のみ] End-User の選好する Email アドレス。 |