設定方法, リファレンス



OpenID Provider (OP) / IdPごとの設定例 実際のコード例はこちら.

OpenID Connect 'response_type' and flows OpenID Connect 仕様 response_type の組み合わせが決まっている。その使い分けについて。

Ruby
[RAW]
  1. # -*- coding:utf-8; mode:ruby -*-
  2. # omniauth を使う.
  3. # See https://github.com/omniauth/omniauth
  4. $LOAD_PATH << "/home/hori/repos/hub_omniauth-openid-connect/lib"
  5. require "omniauth-openid-connect"
  6. Rails.application.configure do |config|
  7. config.middleware.use OmniAuth::Builder do
  8. if !Rails.env.production?
  9. provider :openid_connect, {
  10. # /auth/<name> が認証開始のURLになる.
  11. name: :nov_op_sample,
  12. # これがないと, エラー
  13. # 末尾の '/' は付けてはいけない.
  14. # <issuer>/.well-known/openid-configuration
  15. issuer: 'http://localhost:4000',
  16. # 'openid' で OpenID Connect
  17. scope: ["openid","profile","email","address","phone"],
  18. # 'code' is Basic (Authorization Code) flow. 'token id_token' is Implicit flow.
  19. response_type: :code,
  20. # 有効にしないと, public_key() 内で config.jwks が使われない.
  21. # 必ず true にすること。(デフォルトはfalse)
  22. discovery: true,
  23. # rack-oauth2 パッケージ, Rack::OAuth2::Client.new() に渡される.
  24. # 初期値は, omniauth-openid-connect パッケージ内,
  25. # omniauth/strategies/openid_connect.rb
  26. client_options: {
  27. # omniauth-openid-connect パッケージ内,
  28. # omniauth/strategies/openid_connect.rb:issuer() 内で,
  29. # 上の issuer オプションは使わず, 次の3要素から issuer を作っている.
  30. scheme: "http",
  31. host: "localhost",
  32. port: 4000, # 80番でも省略できない.
  33. # OP側と厳密に合わせる
  34. identifier: クライアントID,
  35. secret: クライアントsecret,
  36. redirect_uri: "http://localhost:8086/auth/nov_op_sample/callback",
  37. },
  38. }
  39. end # !Rails.env.production?
  40. end
  41. end
  42. # See http://qiita.com/nekogeruge_987/items/8bd307f9ae31f27c248a
  43. # http://stackoverflow.com/questions/10963286/callback-denied-with-omniauth
  44. OmniAuth.config.on_failure = Proc.new do |env|
  45. OmniAuth::FailureEndpoint.new(env).redirect_to_failure
  46. end

providerメソッドの第1引数に, :openid_connect を与えます。第2引数のhash で設定を与えます;

:name
[required] omniauth-openid-connect は複数の OpenID Provider に同時に接続できます。ここで区別します。Routing URL は /auth/<name>.
:issuer
[REQUIRED] 認証サーバとのやり取りで使われる issuer フィールド値. IdPを識別する URI.
:discovery
Boolean. 通常は true にします。<issuer>/.well-known/openid-configuration から設定を自動取得します。

もし false にする場合は, client_options に次を与えてください.

  • :authorization_endpoint
  • :token_endpoint
  • :userinfo_endpoint

さらに, id_token の検証のため, 認証サーバの公開鍵, または公開鍵のハッシュを次のオプションに設定;

  • :client_x509_signing_key
:scope
[required] 取得したい内容. プロバイダによってサポートされる値は異なります。scope の一つとして 'openid' を含めてください (MUST).

サポートされる値は, <issuer>/.well-known/openid-configurationscopes_supported 値.

:response_type
[required] omniauth-openid-connect 'renewed' がサポートするのは, :code (the Authorization Code Flow), ['id_token', 'token'] (the Implicit Flow).

The Hybrid Flow -- ['code', 'token'], ['code', 'id_token'] or ['code', 'id_token', 'token'] -- はサポートしません。

See OpenID Connect 'response_type' and flows

client_options は次のように設定します; Hash

:scheme, :host, :port
[OPTIONAL] authorization_endpoint のホスト. 通常は <issuer> のホストと同じため、<issuer> から自動生成される。異なる場合は明示的に指定が必要。
:identifier
[required] OpenID Provider が払い出した client_id
:secret
  • Authorization Code Flow の場合: [required] OpenID Provider が払い出した client_secret
  • Implicit Flow の場合: [forbidden] 指定してはならない。
:redirect_uri
[required] OpenID Provider に登録した callback URL. 通常は /auth/<name>/callback