OAuth & OpenID Connect 関連仕様まとめ

  • 152
    いいね
  • 0
    コメント

はじめに

OAuthOpenID Connect に関連する仕様を紹介していこうと思います。

仕様はたくさんあるものの、ほとんどオプショナルです。しかし、「認可サーバーを実装する際は、RFC 6749 だけではなく、認可コード横取り攻撃への対抗策である RFC 7636 も実装すべきである* という点は強調しておきたいと思います。

* 「PKCE: 認可コード横取り攻撃対策のために OAuth サーバーとクライアントが実装すべきこと」という記事もご参照ください。

1. OAuth 2.0 (RFC 6749)

OAuth 2.0 の仕様の本体は RFC 6749 (The OAuth 2.0 Authorization Framework) です。RFC 6749 の解説記事は世の中にたくさんあるので、ここでは要点だけ手短に紹介します。

RFC 6749 は、アクセストークンを発行する手段として、次の 4 つのフローを定義しています。

  1. Authorization Code Grant (認可コードフロー)
  2. Implicit Grant (インプリシットフロー)
  3. Resource Owner Password Credentials Grant (パスワードフロー)
  4. Client Credentials Grant (クライアント認証情報フロー)

(上記の日本語訳は私が恣意的につけたもので、特に 3., 4. については世の中で合意が取れているわけではありません。)

加えて、リフレッシュトークンを使って新しいアクセストークンを取得するフローも定義しています (RFC 6749, 6. Refreshing an Access Token)。

アクセストークンを発行するサーバー、いわゆる認可サーバーは、これらのフローを実現するため、次の二つのエンドポイントを実装します。

  1. 認可エンドポイント
  2. トークンエンドポイント

インプリシットフローしかサポートしないのであれば、認可エンドポイントを実装するだけで済みます。また、パスワードフローやクライアント認証情報フローだけであれば、トークンエンドポイントの実装だけで済みます。

2. Bearer Token Usage (RFC 6750)

認可サーバーにより発行されたアクセストークンを、保護リソースエンドポイント (狭義の Web API) に渡す方法を定めた仕様が、RFC 6750 (The OAuth 2.0 Authorization Framework: Bearer Token Usage) です。RFC 6750 では、次の 3 つの方法を定義しています。

  1. Authorization ヘッダーに埋め込む方法
  2. リクエストボディーに埋め込む方法
  3. クエリーパラメーターとして渡す方法

3. OAuth 1.0 (RFC 5849)

OAuth 1.0RFC 5849 (The OAuth 1.0 Protocol) で定められていますが、この仕様は RFC 6749 の策定をもって廃止されました。OAuth 1.0a というように、1.0 の後ろに a がつく表記を見かけることがあると思いますが、下表に示すように、1.0a よりも RFC 5849 の方が新しい仕様です。

策定月 仕様
2007 年 12 月 OAuth Core 1.0
2009 年 6 月 OAuth Core 1.0 Revision A
2010 年 4 月 RFC 5849   (The OAuth 1.0 Protocol)

OAuth 1.0 のほうが OAuth 2.0 より安全なの?」という記事もご参照ください。

4. OAuth 2.0 の脅威モデルとセキュリティー考慮事項 (RFC 6819)

OAuth 2.0 の実装にあたり、特にセキュリティーに関して考慮すべき事項が、RFC 6819 (OAuth 2.0 Threat Model and Security Considerations) に挙げられています。

5. トークン取り消し (RFC 7009)

発行されたアクセストークンやリフレッシュトークンを取り消すための手段が、RFC 7009 (OAuth 2.0 Token Revocation) で定められています。この仕様をサポートする認可サーバーは、トークンを取り消すためのエンドポイントを公開します。そのエンドポイントに次のパラメーターを渡すことで、トークンを取り消すことができます。

パラメーター 要否 説明
token 必須 取り消したいトークン
token_type_hint 任意 トークンの種類。access_token もしくは refresh_token

6. トークン情報取得 (RFC 7662)

アクセストークンやリフレッシュトークンの情報を取得するための手段が、RFC 7662 (OAuth 2.0 Token Introspection) で定められています。この仕様をサポートする認可サーバーは、トークンの情報を返すエンドポイントを公開します。そのエンドポイントに次のパラメーターを渡すことで、トークンに関する情報を取得することができます。

パラメーター 要否 説明
token 必須 情報を取得したいトークン
token_type_hint 任意 トークンの種類。access_token もしくは refresh_token

情報は JSON フォーマットで返ってきます。詳細は RFC 7662, 2.2. Introspection Response を参照してください。

7. 認可コード横取り攻撃への対抗策 (RFC 7636)

認可コードフローにより発行された認可コードをクライアントアプリケーションが受け取る際、悪意のあるアプリケーションがその認可コードを横取りするという攻撃 (authorization code interception attack) があります。この攻撃への対抗策として定められた仕様が RFC 7636 (Proof Key for Code Exchange by OAuth Public Clients) です。

RFC 7636 をサポートする認可サーバーの認可エンドポイントは、次の二つのパラメーターを受け付けます。

パラメーター 要否 説明
code_challenge 必須 任意の値である Code Verifier を元に計算された Code Challenge の値
code_challenge_method 任意 Code Challenge の計算に用いるメソッド。plain (デフォルト) もしくは S256

また、トークンエンドポイントで次のパラメーターを受け取ります。

パラメーター 要否 説明
code_verifier 認可リクエストの際に code_challenge パラメーターを付けていた場合は必須 認可リクエストの際に渡した Code Challenge の元となった Code Verifier の値

トークンエンドポイントの実装内で、提示された Code Verifier の値から Code Challenge を計算し、その計算結果を認可リクエストの際に提示された Code Challenge の値と比較することで、認可コードを要求したクライアントアプリケーションとアクセストークンを要求したクライアントアプリケーションが同一であることを確認します。これにより、認可コードを横取りした悪意のあるクライアントアプリケーションにアクセストークンが発行されることを防ぐことができます。

この手順の図解は「Proof Key for Code Exchange (RFC 7636)」にありますのでご参照ください。また、実装については、「PKCE: 認可コード横取り攻撃対策のために OAuth サーバーとクライアントが実装すべきこと」という記事をご参照ください。

8. OpenID Connect Core 1.0

OpenID Connect の中心となる仕様が OpenID Connect Core 1.0 です。この仕様書の柱は、ID トークンの基本構造 (2. ID Token)、ID トークンの取得方法 (3. Authentication)、ID トークンに含めるユーザー属性の種類 (5.1. Standard Claims)、ユーザー情報エンドポイント (5.3. UserInfo Endpoint) です。

OpenID Connect による認証の結果、ID トークンが発行されます。ID トークンには、認証されたユーザーの一意識別子 (subject) の他、オプショナルですがユーザーの属性情報 (claims) が含まれます。しかし、より重要なのは、ID トークンに付与されている署名を検証することで、ID トークンの出所を明らかにすることができる点です。これが、単なるユーザー情報を集めた JSON と ID トークンの大きな違いです。

OpenID Connect Core 1.0 内の個々の仕様については、後ほど言及します。

9. JSON Web Token 関連仕様

OpenID Connect により発行される ID トークンは、JSON Web Token の一種です。JSON Web Token は JWT と短く表現されることがあり、この省略形は「ジョット」と読みます (RFC 7519, 1. Introduction)。JWT の仕様を定めたものが RFC 7519 です。

JWT は、JSON オブジェクトを、JWS または JWE の形式で、もしくは JWS と JWE を組み合わせた形式で表現したものです。ここで、JWS と JWE は、JSON Web SignatureJSON Web Encryption の略であり、それぞれ、RFC 7515RFC 7516 で仕様が定められています。

JWS や JWE では、署名処理や暗号処理の話が出てきますが、これらの処理で使われる署名アルゴリズムや暗号アルゴリズムについては、あえて別の仕様書に記述されています。その別仕様書が、RFC 7518JSON Web Algorithms (JWA)」です。

署名処理や暗号処理で非対称鍵系アルゴリズムが使われている場合、何らかの方法で公開鍵が公開されている必要があります。その表現方法として新たに定められたのが RFC 7517JSON Web Key (JWK)」という仕様です。

一気にいろいろ出てきましたが、まとめると次の表のとおりです。

仕様書 省略形 名称
RFC 7515 JWS JSON Web Signature
RFC 7516 JWE JSON Web Encryption
RFC 7517 JWK JSON Web Key
RFC 7518 JWA JSON Web Algorithms
RFC 7519 JWT JSON Web Token

10. OpenID Connect Discovery 1.0

OpenID プロバイダーに関する情報を取得する手段として、OpenID Connect Discovery 1.0 という仕様が定義されています。

この仕様がサポートされている場合、その OpenID プロバイダーの発行者識別子 (https:// で始まる URI) に /.well-known/openid-configuration を付けた URL に HTTP GET リクエストを投げることで、当該 OpenID プロバイダーの情報を取得することができます。情報は JSON で返されます。その JSON には、3. OpenID Provider Metadata に列挙されている情報が含まれています。

4.2. OpenID Provider Configuration Response には、JSON の例が載せられています。また、実例として、Google 社の実装はこちらになります。

https://accounts.google.com/.well-known/openid-configuration

なお、Google の実装には code_challenge_methods_supported というパラメーターが含まれていますが、これは、ドラフト段階にある OAuth 2.0 Authorization Server Discovery Metadata の仕様を取り込んだ結果です。

11. OpenID Connect Dynamic Client Registration 1.0

クライアントアプリケーションを OpenID プロバイダーに登録する手段として、OpenID Connect Dynamic Client Registration 1.0 という仕様が定義されています。

この仕様をサポートする OpenID プロバイダーは、クライアントアプリケーション登録用のエンドポイントを公開します。そのエンドポイントに、2. Client Metadata に列挙されている情報を含む JSON を HTTP POST で渡すことで、クライアントアプリケーションを登録することができます。

12. 応答タイプ (response_type)

認可リクエスト (OpenID Connect の文脈では認証リクエスト) を認可エンドポイントに投げる際、response_type パラメーターを用いて、認可サーバーから何を返してもらうかを指定します。RFC 6749 を素直に読むと、response_type が取る値は codetoken かの二者択一となります。code の場合は認可コードフローにより認可コードが、token の場合はインプリシットフローによりアクセストークンが、認可エンドポイントからクライアントアプリケーションに返されます。

しかし、OpenID Connect により、response_type が取る値は、「code, id_token, token の任意の組み合わせ」か、もしくは none、となりました。これについては、OpenID Connect Core 1.03. Authentication および OAuth 2.0 Multiple Response Type Encoding Practices で詳しく説明されています。

response_typeid_token が含まれている場合、認可エンドポイントからの応答に ID トークンが含まれます。また、response_typeid_token が含まれていなくとも、code が含まれていて、かつ、scopeopenid が含まれている場合、トークンエンドポイントからの応答に ID トークンが含まれることになります。

response_typecode, id_token, token の全てが含まれている場合、認可エンドポイントからは、認可コード、ID トークン、アクセストークンの 3 つが返ってくることになります。

response_type パラメーターの取りうる値が二者択一の状態から「code, id_token, token の任意の組み合わせ」に変更になったことが、既存の認可サーバーの実装に与える影響の大きさについては、「OAuth 2.0 + OpenID Connect のフルスクラッチ実装者が知見を語る」の「応答タイプ (response_type)」を参照してください。

13. 応答モード (response_mode)

認可コードフローでは、応答パラメーター群はリダイレクト URI のクエリー部に入ります (4.1.2. Authorization Response)。一方、インプリシットフローでは、応答パラメーター群はフラグメント部に入ります (4.2.2. Access Token Response)。このように、RFC 6749 では、フローの種類に基づいて応答パラメーターを入れる場所が決まるルールとなっています。

この状況に対し、OAuth 2.0 Multiple Response Type Encoding Practices という仕様で、応答パラメーター群を入れる場所を制御するためのパラメーターとして、response_mode が追加されました。このパラメーターの値を query とするとクエリー部に、fragment にするとフラグメント部に応答パラメーター群が入るようになります。

また、OAuth 2.0 Form Post Response Mode という仕様により、response_mode パラメーターの値として、form_post が追加されました。form_post を指定すると、認可リクエストに対する認可サーバーの応答は「302 Found + Location ヘッダー」ではなく、「200 OK + HTTP POST を自動実行する HTML」となります。このため、リダイレクトエンドポイントの実装は、(クエリーパラメーター群やフラグメントパラメーター群ではなく) HTTP POST リクエストのリクエストボディーを処理することになります。

なお、応答パラメーターを入れる場所のデフォルト値がフラグメント部である場合、response_mode=query を用いても、応答パラメーターをクエリー部で受け取ることはできません (仕様により禁止されています)。

下表は、「response_typeresponse_mode の組み合わせ」と「HTTP ステータスと応答パラメーターの格納場所」の関係を示したものです。

response_type response_mode
(default) query fragment form_post
302 Found 200 OK
none クエリー部 クエリー部 フラグメント部 HTML FORM 内
code
token フラグメント部 不可 フラグメント部 HTML FORM 内
id_token
code token
code id_token
id_token token
code id_token token

14. ユーザー情報エンドポイント

OpenID Connect Core 1.05.3. UserInfo Endpoint では、保護リソースエンドポイントの一種として、ユーザー情報エンドポイントの仕様を定義しています。このエンドポイントからは、ID トークン相当の情報が、JWT 形式もしくは JSON 形式で返されます。どちらの形式で返されるかは、クライアントアプリケーションの userinfo_signed_response_alg 属性が設定されているかどうかで決まります。userinfo_signed_response_alg は、OpenID Connect Dynamic Client Registration 1.02. Client Metadata で定義されています。 userinfo_signed_response_alg については、「署名アルゴリズム」の議論もご参照ください。

なお、OpenID プロバイダーは、ユーザー情報エンドポイントから返す JWT の署名・暗号アルゴリズムとしてサポートするものを、次のパラメーター群を Discovery 情報に含めることで公開できます。詳細は OpenID Connect Discovery 1.03. OpenID Provider Metadata を参照してください。

  • userinfo_signing_alg_values_supported
  • userinfo_encryption_alg_values_supported
  • userinfo_encryption_enc_values_supported

15. クレーム (claim)

OpenID プロバイダーから発行される ID トークンに含まれるユーザー属性情報群は、クレーム (claim) と呼ばれます。OpenID Connect Core 1.05.1. Standard Claims では、下表のような標準クレーム群が定義されています。

クレーム名 説明
sub ユーザーの一意識別子
name フルネーム
given_name 名前
family_name 苗字
middle_name ミドルネーム
nickname ニックネーム
preferred_username 希望のユーザー名
profile プロフィールページの URL
picture プロフィール画像の URL
website ウェブサイトもしくはブログの URL
email メールアドレス
email_verified メールアドレスが検証済みかどうかを示す真偽値
gender 性別
birthdate 誕生日
zoneinfo 地域情報
locale ロケール情報
phone_number 電話番号
phone_number_verified 電話番号が検証済みかどうかを示す真偽値
address 住所
updated_at 情報最終更新時刻

ID トークンに含めるクレームの種類を、クライアントアプリケーション側から要求することができます。要求方法は二つあり、一つは、scope パラメーターにクレームグループの名称を含める方法 (5.4. Requesting Claims using Scope Values)、もう一つは、claims パラメーターを用いて要求するクレーム群を指定する方法 (5.5. Requesting Claims using the "claims" Request Parameter) です。

scope パラメーターにクレームグループを指定する方法は、柔軟性は高くありませんが簡単です。下表は、定義済みのクレームグループ名と、それを scope に含めたときにどのクレーム群が ID トークンに含まれることになるかを示したものです。

グループ名 グループに含まれるクレーム群
profile name, family_name, given_name, middle_name, nickname, preferred_username, profile, picture, website, gender, birthdate, zoneinfo, locale, updated_at
email email, email_verified
address address
phone phone_number, phone_number_verified

一方、claims パラメーターを用いて要求する方法は、柔軟であり、カスタムクレームを要求するための唯一の方法ではありますが、claims パラメーターの使用方法は、思いのほか複雑です。単純にクレーム名を列挙すればいいわけではありません。詳細は 5.5. Requesting Claims using the "claims" Request Parameter を参照してください。

なお、claims パラメーターのパース処理は複雑で、実装するにはそれなりに手間がかかります。そのためか、claims パラメーターをサポートするかどうかを示す属性として claims_parameter_supportedOpenID Connect Discovery 1.03. OpenID Provier Metadata で定義されており、デフォルト値は false となっています。

16. 認証コンテキストクラス

Authentication Context Class Reference (以降 ACR) という語があり、これは、認証コンテキストクラスの識別子のことです。例えば「urn:oasis:names:tc:SAML:2.0:ac:classes:Password」という ACR はパスワードによる認証に与えられた識別子、「urn:oasis:names:tc:SAML:2.0:ac:classes:X509」という ACR は X.509 証明書による認証に与えられた識別子です。OpenID Connect では、この ACR に関係する仕様が幾つか定義されています。

16.1. acr_values リクエストパラメーター

acr_values は、リクエスト時に指定することができる新しいパラメーターです (3.1.2.1. Authentication Request)。このパラメーターの値に ACR のリストを指定することで、クライアントアプリケーションは、ユーザー認証時に満たして欲しい認証コンテキストクラスを指定することができます。

16.2 claims リクエストパラメーター内の acr クレーム

リクエスト時に ACR のリストを指定する方法としては、acr_values リクエストパラメーターを用いる方法のほか、claims リクエストパラメーターに acr クレームを含める方法があります。下記は claims パラメーターに渡す JSON の例で、5.5. Requesting Claims using the "claims" Request Parameter から抜粋したものです。urn:mace:incommon:iap:silver という ACR が一つ指定されています。

{
 "userinfo":
  {
   "given_name": {"essential": true},
   "nickname": null,
   "email": {"essential": true},
   "email_verified": {"essential": true},
   "picture": null,
   "http://example.info/claims/groups": null
  },
 "id_token":
  {
   "auth_time": {"essential": true},
   "acr": {"values": ["urn:mace:incommon:iap:silver"] }
  }
}

指定した ACR 群のどれか一つが必ず満たされることを要求したい場合、acr クレームを必須 (essential) とマークします。これは、次のように「"essential":true」を JSON に含めることでおこないます。

{
  "id_token":
    {
      "acr":
        {
          "essential": true,
          "values": ["urn:mace:incommon:iap:silver"]
        }
    }
}

acr クレームが必須とマークされているにも関わらず、指定された認証コンテキストクラスのいずれも満たすことができなかった場合、認可エンドポイントはエラーを返します。詳細は 5.5.1.1. Requesting the "acr" Claim を参照してください。

16.3. ID トークン内の acr クレーム

ID トークンに acr クレームが含まれていた場合、それはユーザー認証時に満たされた認証コンテキストクラスを示しています。詳細は 2. ID Token を参照してください。

16.4. サポートされる ACR (acr_values_supported)

OpenID プロバイダーは、自身がサポートする認証コンテキストクラスのリストを、acr_values_supported の値として公開することができます。詳細は OpenID Connect Discovery 1.03. OpenID Provider Metadata を参照してください。

16.5. デフォルトの ACR (default_acr_values)

クライアントアプリケーションは、認可リクエストに ACR のリストが含まれていない場合に使用するデフォルトの ACR リストを、default_acr_values の値として予め設定しておくことができます。詳細は、OpenID Connect Dynamic Client Registration 1.02. Client Metadata を参照してください。

16.6. ACR 処理の流れ

ここまでに挙げた ACR に関するパラメーター群を踏まえると、OpenID プロバイダー側でおこなう ACR に関する処理フローは次のようになります。

  1. 認可エンドポイントへのリクエストに含まれる acr_values リクエストパラメーター、もしくは claims リクエストパラメーターで指定された JSON 内の acr パラメーターから、ACR リストを取り出す。(仕様では、acr_valuesclaims 内の acr のどちらが優先されるかは言及されていない。ちなみに Authlete では claims の方を優先する。)

  2. 前の処理で ACR リストが得られなければ、クライアントの default_acr_values 属性から ACR リストを取り出す。

  3. ここまでの処理で ACR リストが得られていれば、個々の要素がサポート済みであるかどうかを、OpenID プロバイダー自身の acr_values_supported 属性と照らし合わせて確認する。

  4. ACR リストは、「クライアントアプリケーションが希望する好ましい順」に並んでいるので、先頭から順番に、どれか一つが成功するまで、指定された認証方法でユーザー認証を試みる。

  5. 指定された認証方法のいずれでも認証ができなかった場合、リクエストの claims リクエストパラメーターで acressential=true とマークされているかどうかを調べる。もしも、essential=true であれば、クライアントアプリケーションにエラー応答を返す。

  6. 指定された認証方法のいずれかでの認証が成功した場合は、生成する ID トークンに acr クレームを含める。

17. 認証後許容経過時間

Maximum Authentication Age という語があり、これは、ユーザーが最後に認証された時点からの経過時間として許容する時間の最大値を指します。経過時間がこの値よりも大きい場合、当該ユーザーが既にログイン済みであったとしても、ID トークンの発行に際して再度認証処理が必要となります。

17.1. max_age リクエストパラメーター

クライアントアプリケーションは、max_age パラメーターを使い、許容する経過時間の最大値を指定することができます (3.1.2.1. Authentication Request)。

17.2. 認証後許容経過時間の最大値のデフォルト値

クライアントアプリケーションは、リクエストに max_age パラメーターが含まれていない場合に使用するデフォルトの認証後許容経過時間の最大値を、default_max_age の値として予め設定しておくことができます。詳細は、OpenID Connect Dynamic Client Registration 1.02. Client Metadata を参照してください。

18. 認証対象ユーザーの指定

クライアントアプリケーションは、claims リクエストパラメーターに渡す JSON 内で sub クレームの値を指定することにより、認証対象のユーザーを指定することができます。下記は、一意識別子として 248289761001 という値を持つユーザーを指定する例です。

{
  "id_token":
    {
      "sub": {"value": "248289761001"}
    }
}

sub クレームが指定されている場合、認証はそのユーザーに対して実行されます。もしもこの条件を満たせない場合、認可エンドポイントはエラーを返します。詳細は 3.1.2.2. Authentication Request Validation を参照してください。

19. ログイン ID に関するヒント (login_hint)

クライアントアプリケーションは、login_hint リクエストパラメーターを用いて、認可エンドポイントにおける認証で使用するログイン ID に関するヒントを、サーバーに伝えることができます (3.1.2.1. Authentication Request)。例えば、ユーザーのメールアドレスを login_hint に渡すといったことが考えられます。login_hint で渡された値をどのように利用するかは、全く利用しないケースも含め、サーバー側の自由です。

20. ヒントとしての ID トークン (id_token_hint)

クライアントアプリケーションは、過去に認可サーバーから発行された ID トークンを id_token_hint リクエストパラメーターの値として指定することで、認証対象ユーザーに関するヒントをサーバーに伝えることができます (3.1.2.1. Authentication Request)。

21. プロンプト (prompt)

認可エンドポイントにアクセスすると、認可処理に含まれる手順の一つとして、ユーザー認証処理が行われます。どのようにユーザー認証を行うかは実装依存であり、RFC 6749 では「この仕様の範囲外である」と明確に書いています (参考:認証と認可)。そのため、認可サーバーによっては、既にユーザーがログイン済みである場合、認証処理を省略することがあります。加えて、既にユーザーが対象となるクライアントアプリケーションに対して過去に認可を与えていれば、同意の確認さえ省略することがあります。

このような実装依存の動作に対し、OpenID Connect Core 1.0 では prompt というリクエストパラメーターを追加し、クライアントアプリケーション側から動作を制御できるようにしました (3.1.2.1. Authentication Request)。

prompt が取りうる値は、login, consent, select_account の任意の組み合わせか、もしくは none です。それぞれ次のような意味があります。

意味
none ユーザー認証や同意のための画面を一切出さない。
login 過去に認証済みでも、ユーザー認証をおこなう。
consent 過去に同意取得済みでも、同意確認をおこなう。
select_account 複数のユーザーアカウントの中から選択できるようにする。

prompt=none の場合、認証と同意が事前に済んでいる場合に限り、リクエストが成功します。

22. 表示モード (display)

認可エンドポイントにアクセスすると、リクエストに prompt=none が含まれない限り、認可画面が表示されますが、この画面の表示モードを制御するリクエストパラメーターとして display が定義されています (3.1.2.1. Authentication Request)。display が取りうる値は次の 4 つで、display パラメーターが省略された場合は page が指定されたものとして処理されます。

意味
page ブラウザの描画領域全体を使って表示をおこなう。
popup ポップアップ形式で表示をおこなう。
touch タッチスクリーン向けの表示をおこなう。
wap フィーチャーフォン向けの表示をおこなう。

OpenID プロバイダーは、自身がサポートする表示モードのリストを、display_values_supported の値として公開することができます。詳細は OpenID Connect Discovery 1.03. OpenID Provider Metadata を参照してください。

23. 表示言語 (ui_locales)

認可画面で使われる言語を ui_locales リクエストパラメーターで指定することができます。ui_locales には、希望する順番で言語タグをスペース区切で列挙します。言語タグの形式は、RFC 5646 (Tags for Identifying Languages) で定義されています。

例えば、ui_locales の値が fr-CA fr en であれば、これは、「カナダで使用されているフランス語、フランス語、英語」、という意味になります。

OpenID プロバイダーは、自身がサポートする表示言語のリストを、ui_locales_supported の値として公開することができます。詳細は OpenID Connect Discovery 1.03. OpenID Provider Metadata を参照してください。

24. リクエストオブジェクト

認可エンドポイントに渡すリクエストパラメーター群を JWT 形式で渡す方法が OpenID Connect Core 1.0 の「6. Passing Request Parameters as JWTs」で定義されています。仕様では、リクエストパラメーター群を含む JWT をリクエストオブジェクトと呼んでいます。

リクエストオブジェクトを指定する方法には、次の二つがあります。

  1. request パラメーターでリクエストオブジェクトの値を直接渡す方法 (6.1. Passing a Request Object by Value)
  2. request_uri パラメーターでリクエストオブジェクトの場所を伝える方法 (6.2. Passing a Request Object by Reference)

OpenID プロバイダーは、これらの方法をサポートするかどうかを、Discovery 情報に次の項目を含めることで公開できます。

項目 デフォルト値 説明
request_parameter_supported false request パラメーターをサポートするかどうか
request_uri_parameter_supported false request_uri パラメーターをサポートするかどうか

同様にして、OpenID プロバイダーがサポートするリクエストオブジェクトの署名・暗号アルゴリズムのリストは、次の項目で示されます。

  • request_object_signing_alg_values_supported
  • request_object_encryption_alg_values_supported
  • request_object_encryption_enc_values_supported

これらのメタ情報の詳細については OpenID Connect Discovery 1.03. OpenID Provider Metadata を参照してください。

25. その他

必要に応じて追記していきます。

関連仕様リスト

注意:全ての関連仕様を網羅しているわけではありません。

おわりに

こちらも併せてご覧いただければと思います。