OpenID Connect 'response_type' and flows



Authentication = 「認証」, Authorization = 「認可」. Authorization Endpoint は「認可エンドポイント」. Authentication Request は「認証要求」.

OpenID Connect 全フロー解説 - Qiita という労作がある。しかし、使ってはならないフローまで解説してあるので、不味いことになっている。

OpenID Connectユースケース、OAuth 2.0の違い・共通点まとめ - Build Insider で、ユースケースごとの認証フロー, single sign on (SSO), 再認証・強制認証のさせ方、パラメータの与え方まで解説。とても参考になる。

response_type の組み合わせ一覧

Authorization Request (認証要求) に含まれる response_type で、フローが決定される。組み合わせは次のいずれか;

"response_type" value Flow
code Authorization Code Flow
id_token Implicit Flow
id_token token Implicit Flow
code id_token Hybrid Flow
code token Hybrid Flow
code id_token token Hybrid Flow
none

response_type=token は, OpenID Connect では, 使ってはならない (MUST NOT). IDトークンが得られないため。

response_type が 'none' 以外の場合、常に scope パラメタに 'openid' スコープ値を含めなければならない (MUST). response_typecode または code token のときに必須なのは、仕様から明らか。それ以外の場合も、実装はエラーになる。

See Basics: OAuth and OpenID Connect #fapisum - Japan/UK Open Banking and APIs Summit 2018 - July 24, 2018

使い分け

Webアプリでは, response_type=code (Authorization Code Flow) でOK.

ネイティブ (デスクトップ) アプリは, バイナリ内に秘密情報を持たせることができないので, Implicit Flow または Hybrid Flow. IDトークンについて, OPが付加したデジタル署名の検証が必要になる。

『OpenID Connect と SCIM のエンタープライズ実装ガイドライン』 1.0 では, response_typeid_token または id_token token でなければならない (MUST). Implicit Flow を仮定。

業務領域による考慮もある。

Financial-grade API (FAPI) は, 更新系 (read and write) の操作 (operation) を行う場合, response_typecode id_token または code id_token token でなければならない (MUST). 金融であれば、これによる必要がある。

必要があれば再認証、でもいいか? Financial API 実装の技術課題 - Qiita