Skip to content

Instantly share code, notes, and snippets.

@hiyosi
Created January 7, 2015 14:30
Show Gist options
  • Save hiyosi/b2679b46500e09c79732 to your computer and use it in GitHub Desktop.
Save hiyosi/b2679b46500e09c79732 to your computer and use it in GitHub Desktop.

OpenID Connect sample provider

Build Status Coverage Status Code Climate

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

動作確認

  1. Rails アプリケーションの起動
 $ bundle exec rake db:migrate
 $ bundle exec rails s
  1. http://localhost:3000/applications にアクセスして RP を登録して下さい。

  2. sign_in 画面にリダイレクトされるので、その画面から sign_up のリンクをクリックしユーザを登録して下さい。

  3. ユーザ登録完了後、RP の登録ページに戻ると思いますので、自身のRPを登録して下さい。

OPの仕様

Authorization リクエストパラメータ

このプロバイダでは以下のリクエストパラメータをサポートしています。

パラメータ 内容
scope [必須] openidを含むこと。openid,profile,email をサポート
response_type [必須] id_tokenのみサポート。
client_id [必須] RPのクライアント識別子。
redirect_uri [必須] レスポンスが返されるリダイレクト先URI文字列。RP登録時のURI群のいずれかに完全一致する必要がある。
state [必須] CSRF対策の文字列。
nonce [必須] リプレイ攻撃対策の文字列。指定した文字列がIDトークンのnonceフィールドに格納される。

Authorization レスポンスパラメータ

Authorization リクエストに成功すると、以下のパラメータがリダイレクトURLのフラグメントとして返されます。

パラメータ 内容
token_type Bearer固定
id_token IDトークン文字列。
state 認可リクエストでstateを指定していた場合のみ、その値が格納される。

IDトークンに含まれるクレーム

このプロバイダ提供する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 の性別。
email [scopeにemailを指定したリクエストの場合のみ] End-User の選好する Email アドレス。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment