OAuth 2.0 の概要メモと azure active directory を触ってみたメモ

はじめに

認可サーバー と OAuth 2.0 の概要

  • API経由でデータを取得するとき対策が何もないとすると、悪意のあるクライアントのリクエストにも、リソースサーバーは普通に応答してしまう
  • 対策のプラクティスとして...
    • クライアント側でリクエストを投げるときにアクセストークンも一緒になげる。リソースサーバー側でそれをチェックする。
    • アクセストークンは、Authrization ヘッダーとかに入れて投げる
  • 認可サーバー とは
    • 上記対策を実現するには、事前にクライアント側のサーバーにアクセストークンを発行しておく必要がある
    • このアクセストークンを発行する役割を持つのが 認可サーバー
  • OAuth 2.0 とは
    • アクセストークンの受け渡しする際の、クライアントサーバーと認可サーバーのやり取りの手順を標準化したもの
    • 画像の黄色い丸が OAuth2.0 の範囲

Open ID Connect の概要

  • こちらもクラインとサーバーと認可サーバー間のトークンのやり取りを標準化したものという点は同じ
  • 違う点としては認可サーバ(兼OpenIDプロバイダー)が ID トークンとアクセストークンどちらも払い出すことができる
  • ID トークンとはユーザーが認証されたことを証明するトーク
    • 認証後、その先のリソースサーバーにアクセスするため(認可)に使用するものではない
    • JWT形式で書かれている。Base64エンコードされいて、アプリ側でデコードするとユーザーに関する情報や認証に関する情報がのっている

OICDのトークンの発行手順

実際に触っていく内容

  • 上記の implicit flow を試していきたいと思います
    • アプリ側の実装がめんどくさかったので今回は Mock サーバーで代用します
    • なので Azure AD (認証認可サーバー) から トークンを受け取っていい感じのリクエストがアプリ側に投げられているかまでを確認して終了となります
  • 画像部分のフローのイメージになります

事前準備

  • 事前準備として、Mockサーバーの用意とAzure ADの設定を済ませます
  • Mockサーバーは mockoon というツールを使用
    • 詳しい使い方はこちらのブログ参考にしてもらえればと思います
    • インストール後、下の画像の3ステップぽちぽちするだけで mock サーバ立ち上がりました。とても便利です。。。
    • 今回は http://localhost:3000/hoge の POST リクエストが来たら It Works と返すシンプルなものを用意しておきます
  • azure active directory リソースがなかったら作成しておきます(参考ドキュメント)
  • azure active deirectory の アプリの登録をします
    • アプリ名は任意、Redirect URI は後で設定するので空でOK
  • 登録したアプリを開いて設定をしていきます
    • Redirect URIhttp://localhost:3000/hoge に設定
      • azure ad がトークンを発行した後、どこにリダイレクトさせるかを設定する場所になります
    • アクセストークン、IDトークンをエンドポイントが発行するように設定
      • 画像の 3 のところです

設定&動作確認

  • 設定が完了したので、実際に画面から触ってみましょう
  • ドキュメントを参考に認証エンドポイントにアクセスする URI を以下のような形で組み立てます(参考ドキュメント)
    • tenant_idclient_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 入門編の動画がわかりやすくまとまっていてよかったです。多分認証系の技術をあまり触ったことない方もわかるようになっていてお勧めだなと思いました。
  • この内容を発展させて受け取ったトークンサーバー側でバリデートする実装とかもしてみたいなと思いました。余裕があったらやりたいです、いつか。。。