OpenID Connect の変更点


#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]]