OpenID Connectを学ぶ
前からピンときてなかった認証周り。OAuth?Bearer token?JWT?って感じだった。名前は知っていたけど、あまり詳細まで理解せずに使ってきた。さすがにバックエンドサーバを開発している立場としてやばいと思ってきたので勉強することにした。
OpenID Connectについて学んだ過程をメモしておく。何か解説できるほど詳しいわけでないので、学んだ過程を残すことにする。
入門編
OpenID Connectの雰囲気をつかむ
一番分かりやすい OpenID Connect の説明 - Qiitaで、OpenID Connectの雰囲気をつかむ。
以下の内容を理解した。
- OpenID Connectだと、アクセストークンとIDトークンをもらえる
- OpenID ConnectはOAuth 2.0の拡張版
OAuthとOpenID Connect
OAuthとOpenID Connectなどをザックリと理解するのに役に立った。
以下の内容を理解した。
- IDトークンは「ヘッダ」「ペイロード」「署名」で構成されている
- IDトークンはJWT形式で提供される
- OpenID Connect 1.0では認証フローが3種類ある
他にもSAMLなども解説されていて、認証周りで分からない単語が減ったのが良かった。
OpenID Connectの認証フローの解説
次にOpenID Connectが実際にどう動くのかも含めて解説してくれるスライド。少し詳細に踏み込んだ内容で、とても分かりやすい。「eyj」でテンション上がるのは、どうにかしていると思う。
認証フローの流れが具体的にイメージできるようになった。
簡単に自分の理解を書いておく。
- ユーザーは”他のサービスを使ってログイン”を選択する。
- RPはIdPにリダイレクトさせる。その時に、戻ってこれるようにリダイレクトURLを指定する
- ユーザーはIdPでログインする。その後、RPのページにリダイレクトする。
- RPはクエリパラメータから認可コードを手に入れる
- RPは認可コード、client id, client secretを使って、アクセストークンとIDトークンを手に入れる
- RPはリソースを取得する際に、アクセストークンを使ってAPIを呼び出す
その他、以下のサイトもサッと読んでおくと理解が深まる。
実践する
理解が深まったら何かで試してみるのがいい。LINEで試せるようなので、実際に動かしてみた。以下に丁寧な解説がある。Node.jsのコードも読みやすい。実際に動かすとさらに理解が深まった。scopeに"mail"や"profile"を指定することで、そのリソースにアクセスすることができる。
ここまできて、IDトークンとアクセストークンの使い分けが分からなくなってきた。
自分のアプリの一部としてのバックエンドAPIなら、IDトークンを使ってバックエンドAPIで検証すれば良いとのこと。