はじめに
- OAuth 2.0 や OIDC についての話題が出るたび、毎回ふわっとした知識しか引き出せないので基礎からおさらいしました
- 認証の基盤は azure ad を使う機会がほとんどなので、上記知識を紐づけつつ触った内容をメモしていきたいと思います
- 以下動画&ブログを参考に触っていきました
認可サーバー と OAuth 2.0 の概要
- API経由でデータを取得するとき対策が何もないとすると、悪意のあるクライアントのリクエストにも、リソースサーバーは普通に応答してしまう
- 対策のプラクティスとして...
認可サーバー
とはOAuth 2.0
とは- アクセストークンの受け渡しする際の、クライアントサーバーと認可サーバーのやり取りの手順を標準化したもの
- 画像の黄色い丸が
OAuth2.0
の範囲
Open ID Connect の概要
- こちらもクラインとサーバーと認可サーバー間のトークンのやり取りを標準化したものという点は同じ
- 違う点としては認可サーバ(兼OpenIDプロバイダー)が ID トークンとアクセストークンどちらも払い出すことができる
- ID トークンとはユーザーが認証されたことを証明するトークン
OICDのトークンの発行手順
- 代表的なフローはいくつかあるが個人的に抑えたいのが以下二つ
- authorization code flow
- 一番メジャーなフローっぽい
- azure ad でいうと Microsoft ID プラットフォームと OAuth 2.0 認証コード フロー
- Implicit flow
- 認可エンドポイントからアクセストークンが直接発行される
- azure ad でいうと Microsoft ID プラットフォームと暗黙的な許可のフロー
実際に触っていく内容
- 上記の implicit flow を試していきたいと思います
- 画像部分のフローのイメージになります
事前準備
- 事前準備として、Mockサーバーの用意とAzure ADの設定を済ませます
- Mockサーバーは mockoon というツールを使用
- azure active directory リソースがなかったら作成しておきます(参考ドキュメント)
- azure active deirectory の アプリの登録をします
アプリ名
は任意、Redirect URI
は後で設定するので空でOK
- 登録したアプリを開いて設定をしていきます
設定&動作確認
- 設定が完了したので、実際に画面から触ってみましょう
- ドキュメントを参考に認証エンドポイントにアクセスする URI を以下のような形で組み立てます(参考ドキュメント)
tenant_id
とclient_id
は先ほどの準備の時に登録したアプリのIDを使ってください
GET https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize? client_id={client_id} &response_type=id_token &response_mode=form_post &scope=openid &state=12345 &nonce=678910
ブラウザからURLを入力すると以下の画面に遷移します
これを承認すると無事 Mock サーバーからの応答を確認できました。フォームデータの中に IDトークンも含まれていることが確認できます。
おわりに
- 一般的な認証フローと azure active directory 上の実装方法を紐づけて覚えられたので勉強になりました。最初の参考のところにもリンクしたのですが、OAuth & OIDC 入門編の動画がわかりやすくまとまっていてよかったです。多分認証系の技術をあまり触ったことない方もわかるようになっていてお勧めだなと思いました。
- この内容を発展させて受け取ったトークンサーバー側でバリデートする実装とかもしてみたいなと思いました。余裕があったらやりたいです、いつか。。。