s1r-Jの技術ブログ

とあるSEの技術ブログ

雰囲気OAuth本を読んだ

先月10月はブログ記事を書けなかったので、今月はその分を入れて2本書きたい。


さて、OAuthに関する書籍を読んだので、その感想を書いておこうと思う。 今回読んだのはAuth屋の本を2冊読んだ。

最初の雰囲気~の方は商業版があり、Amazon楽天で購入することができるが、BOOTHでPDF版を購入した。 感想と書籍内のチュートリアルが現在(2021年11月14、15日あたり)と若干変わっていたのでその部分だけ軽く書いておく。

上記の本については、全員がOAuth 2.0を理解しているチームの作り方 #devio2021 | DevelopersIO などでも紹介されている。

感想

とりあえず、読んだ感想から。

一言でまとめるとOAuth、OIDCの流れがわかりやすかった。シーケンス図が繰り返し出てくるのと、チュートリアルではブラウザとcurlコマンド(とGoogleアカウント)だけを使うので直感的につかめたのが大きいと思う。書籍にも書かれていたが、curlコマンドはWindows10ならコマンドプロンプトcurlコマンドが使える。また、「OAuth、OAuth認証OpenID Connectの違いを整理して理解できる本」の最後にMacでコマンドを使ってIDトークンの中身を見ていたが、コマンドが使えなくてもJWTのデコードはJSON Web Tokens - jwt.ioというサイトを使えばブラウザ上で実行できるので、この点も問題ない。

下の画像のようにEncodedに取得したIDトークンを入れると右側のDecodedに結果が表示される。

jwt.ioでIDトークンをデコード

OAuthについては、OAuth徹底入門 セキュアな認可システムを適用するための原則と実践を以前読んだが、こちらは400ページ以上あり、説明以外にOAuthアプリのNode.jsのソースコードが記載されているなどさくっと欲しい情報を見るのは少し手間だった。「OAuth、OAuth認証OpenID Connectの違いを整理して理解できる本」の方はシーケンス図だけを抜き出した別PDFファイルもあるので探すのが楽だと思う。

OAuth・OIDCのクライアント・RP側としてアプリを作成するなら、上記のAuth屋の書籍をまず読むのは非常におすすめ。詳しく知ろうと思ったら結局RFCを読むことになるのはどの書籍でも同じだと思う。 OAuth徹底入門の方は、クライアント側、認可サーバ側の両方に対応しているようだった。署名検証の処理やBase64処理など基本的な処理をNode.jsで実装するチュートリアルがあるため、この辺も知りたいならばOAuth徹底入門が良い。(個人的な話だが、Node.jsの勉強もしたかったので徹底入門は都合がよかった。)セキュリティ関連は徹底入門のほうが詳しいが上記2冊の次であるOAuth・OIDCへの攻撃と対策を整理して理解できる本(リダイレクトへの攻撃編 - Auth屋 - BOOTHにこのあたりは書いてあると期待している。

チュートリアルの差異

コマンド内のシングルクォーテーション

トークン取得でcurlコマンドを実行するがWindows10のコマンドプロンプトではダブルクォーテーションでないと実行できなかった。下のようなかんじにすると動いた。

curl -H "Authorization: Bearer ya29.a0AR...rdP" https://openidconnect.googleapis.com/v1/userinfo

ユーザタイプの選択画面、テストユーザの追加

チュートリアルではGoogle Cloud Platform(GCP)にアクセスしてOAuth同意画面の作成をおこなうとき、書籍には記載されていないユーザタイプを選択させる画面が表示された。

今回、「外部」しか選択できなかったのでそのまま進めた。どうやらテストユーザしか使用できなくなるので、次のようにテストユーザを追加した。

ユーザタイプ

テストユーザとしてGoogleアカウントを追加すればよい。 まずはOAuth同意画面の「+ ADD USERS」というボタンをクリックする。

テストユーザ

先のボタンをクリックするとダイアログが表示される。 入力欄に、Googleアカウントのメールアドレスを入力して保存ボタンを押す。テストユーザは、GCPにアクセスしているアカウントで問題なかった。

追加