#author("2022-10-08T16:18:13+09:00","default:k1rou","k1rou") #author("2023-03-23T20:59:52+09:00","default:k1rou","k1rou") *OpenID Connect とは [#u5bb708c] -略語は「OIDC」。 **名称 [#ga250b5a] -OIDC **概要 [#fa59085d] -[[認証]]と[[認可]]と属性取得の技術で構成されている。 --[[認証]]は、[[JSON Web Token]] --[[認可]]は、[[OAuth2.0]] --属性取得は、属性情報取得APIの仕様 -認可の仕様([[OAuth2.0]])をベースに、認証の仕様([[OpenID]])を加え、属性取得もできるようにしたもの。 -[[REST]] APIライクな[[JSON]](使用技術) -コンシューマ系で採用されている。 -[[野村総合研究所]]、[[Google]]を中心に開発を開始した。 -2014年2月に最終承認された。 *OIDCの仕様 [#z9bbe46e] **ロール(登場人物) [#v66bc1a3] -エンドユーザ (User) -リライングパーティ (RP) --IdPの認証結果を受け取るアプリケーション --事前にIdPに登録する必要がある。 -IDプロバイダー (IdP) --OpenIDプロバイダー (OP) --IDトークンとアクセストークンを発行する -UserInfoエンドポイント --エンドユーザのプロフィール情報をRPに提供する **エンドポイント [#ife9f8d9] -認可エンドポイント -トークンエンドポイント -リダイレクションエンドポイント -ユーザーインフォエンドポイント **スコープ [#f527332c] -UserInfoエンドポイントから取得する情報 --openid ※必須 --profile --email --address --phone **トークン [#r48938d6] -IDトークン --IdPがRPに対して発行する --RPはIDトークンを使ってエンドユーザを認証する --トークンに含まれる情報:ユーザID、有効期限、発行者・受領者、トークンの形式・署名方法、署名 --トークンの形式:[[JWS]](署名付き[[JWT]]) -アクセストークン --認可情報 -認可コード -リフレッシュトークン **フロー [#uea75fbd] ***認可コードフロー [#b1a332f4] -Authorization Code Flow -[[OAuth2.0]]の認可コードグラント -サーバサイドで認証 -コンフィデンシャルクライアント(RP)向け ***インプリシットフロー [#be32af4a] -Implicit Flow -[[OAuth2.0]]のインプリシットグラント -パブリッククライアント向け -クライアントサイドで認証 -リフレッシュトークンの発行が禁止されている ***ハイブリッドフロー [#d006966d] -Hybrid Flow -認可コードフローとインプリシットフローのハイブリッドなフロー -サーバサイド・クライアントサイドの両方で認証 *OIDCの仕様・プロトコル [#zb80fbb4] -OpenID Foundation 標準 -※元々は以下の部分規格に分かれていた。 --OpenID Connect Core --OpenID Connect Discovery --OpenID Connect Dynamic Registration --OAuth 2.0 Multiple Response Type Encoding Practices -※策定中の規格 --OpenID 2.0 to Connect Migration --OpenID Form POST binding --OpenID Connect Session Management -※関連する別規格(IETF OAuth WG) --[[JSON Web Token]]([[JWT]]) -※関連する別規格(IETF JOSE WG) --JSON Web Signature(JWS) --JSON Web Encryption(JWE) --JSON Web Algorithms(JWA) --JSON Web Key(JWK) -※関連する別規格(IETF Apps WG) --[[WebFinger]] *セキュリティ上の脅威 [#y208fb35] **IDトークンの不正利用 [#f2461d1d] ***使うもの [#w0cb6d18] -nonce を使う -nonce --number used once --ランダムな文字列 --クライアント側で生成してセッションと紐づけて管理する --nonce の値は一度切りしか使わないことが前提 ***フロー [#v02d247f] +クライアント(スマホアプリ等)がIDプロバイダに送る認証リクエストにnonce を追加する +IDプロバイダはnonce を保存する +IDプロバイダがクライアントに送るトークンレスポンスにnonce を追加する --クライアントからIDプロバイダへのトークンリクエストの認可コードを元にIDトークンにnonce を設定する +クライアントは受信したnonce を検証する --受信したnonce と保存していたnonce が一致しているか確認する --正規のユーザの認可コードに紐づくnonce と攻撃者の認可コードに紐づくnonce が異なるので検知できる *OIDCの実装 [#na6223de] **Webサービス [#tdedeb18] -Google -Microsoft -Salesforce -Mixi -Yahoo!Japan **OSS [#db7b586a] -[[OpenAM]] -[[Keycloak]] -[[Gluu Server]] *関連サイト [#ec917f68] -OpenID Foundation Japan 公式サイト~ http://openid.ne.jp/ -OpenID Foundation 公式サイト(英語)~ https://openid.net/ ~ http://openid.net/connect/ -OpenID Connect Core 1.0 ドキュメント(最終版:英語)~ http://openid.net/specs/openid-connect-core-1_0.html -OpenID Connect Dynamic Client Registration 1.0 incorporating errata set 1~ https://openid.net/specs/openid-connect-registration-1_0.html -OpenID Connect Discovery 1.0 incorporating errata set 1~ https://openid.net/specs/openid-connect-discovery-1_0.html -OpenID Connect入門 (Yahoo!デベロッパーネットワーク)~ https://www.slideshare.net/techblogyahoo/openid-connect-openid-technight-133177834 -Google Identity Platform >OpenID Connect (Google)~ https://developers.google.com/identity/protocols/OpenIDConnect *関連用語 [#f4aabd9c] -[[統合認証]] -[[プライバシーバイデザイン]] -[[CIBA]] -Client Initiated Backchannel Authentication -[[CSRF]] -[[Financial API]] -[[ID連携]]([[フェデレーション]]) -[[JSON]] -[[OAuth]] -[[OpenID]] -[[REST]] -[[SAML]] -[[SCIM]] -[[Self Issued IdP]]