OpenID Connectとは何か
あるシステムが外部のIDプロバイダー(IdP)にユーザを識別と認証をしてもらう時の、システム間のやりとりの仕方を標準化したもの。
OpenID ConnectをサポートしたIdPを利用することで、利用側はIdPがユーザの識別と認証をした結果としてのユーザ識別子をid_tokenという形式で得ることができます。
またクライアント側で必要であれば、IdPが持つユーザ情報(userinfo)を取得することができます。
ユーザの識別と認証とは
ユーザの識別とはある特定のユーザであると見分けることです。
よくあるログイン画面ではメールアドレスをIDとして入力しますが、そのケースではメールアドレスをもって識別することになります。
認証とは、パスワードの一致の確認など、色々な手段を用いて、アクセスしてきたユーザがある特定の人(メールアドレスなどで識別された人)であることを確認することです。
id_token
OpenID Connectではユーザ識別子はID TokenというJSONの形でIdPが発行します。
ID TokenはJSONなのでissやsubといったユーザ識別子としての重要データの他、ID TOKEN発行元情報やID TOKEN発行時間などが含まれていて、利用側がID TOKENの受信時に妥当性を確認できるようになっています。
OpenID Connectには関係ないもの
以下のものはOpenID Connectの規格とは関係ありません。
ユーザアカウント作成
OpenID Connectは認証に関するシステム連携の仕方しか規定していません。
アカウント作成は認証に先立って行う必要がありますので、OpenID Connectの規格の範囲外です。
認証方法
OpenID Connectでは認証を外部にお願いしたいサービス(Client)と、ユーザ識別子を外部に提供するサービス(IdP)との間の、ユーザ認証依頼〜ユーザ識別子が提供されるまでの連携方法しか規定してません。パスワード認証や指紋認証といった認証自体の方法は規定していません。規格の範囲外です。
セッション管理
OpenID ConnectをサポートするIdPが、それを利用するサービスのセッションを管理してくれることはありません。
例えばECサイトがGoogleログインを実装する場合、当たり前ですがECサイトのセッションはECサイト側で作成、管理する必要があります。
マイクロサービスのセキュリティ
OpenID Connectでは「トークン」や「JWT」といった、マイクロサービスでのセキュリティに関する実装に使われる用語が出てくるので勘違いされる方もいますが、OpenID Connectという規格はマイクロサービス間の通信のような「1つのサービス内でのシステム間連携」には関係ありません。
また、OpenID Connectの規格がベースとしているOAuth2は認可(データアクセス権の制御)の仕組みを規定していますが、OpenID Connectは利用側のシステムの認可についても関係ありません。