業務で使用する機会があったのでまとめます。
OAuthとは何か
そもそもOAuth(オーオース)とは何か?についてですが、
ユーザーに代わってアプリケーションが別のWebサービスを利用できるように認証する機能のことです。
通常、Webサービスを利用するためは、個別にユーザーIDとパスワードを入力してユーザーを認証する必要があります。
OAuthを利用することで、IDやパスワードを入力することなく、アプリケーション間の連動ができるようになります。
文章だけだとよくわからないと思うので次の章で図を用いて説明します。
処理の流れ
前提
- OAuthにて登場するエンドポイントは以下3つ
「クライアント」「認可サーバ」「APIサーバ」であり、開発者は「クライアント」のアプリケーションを開発しているとします - ここではAPIの認証に使用するとします
-
「クライアント」から「認可サーバ」にトークンリクエストを送信
事前に取得しているクライアントIDとクライアントシークレットを含めたトークンリクエストを送信します。
※クライアントIDとクライアントシークレットはあらかじめ「認可サーバ」で生成し、「クライアント」アプリケーションに渡しておきます。 -
「認可サーバ」から「クライアント」にアクセストークンを返却
トークンリクエストに含まれるクライアントID とクライアントシークレットをチェックしクライアントの身元を確認します。
チェックしOKであればアクセストークンを生成し返却します。 -
「クライアント」から「APIサーバ」にAPIリクエストを送信
「認可サーバ」から取得したアクセストークンを含めたAPIリクエストを送信します。 -
「APIサーバ」から「クライアント」にAPIレスポンス返却
APIリクエストに含まれるアクセストークンを検証しOKであればレスポンスを返却します。
もしアクセストークンが間違っていれば認証エラーとなり、よく見る401 Unauthorizedという応答が返ってきます。
OAuth導入によるメリット
従来のID・パスワードベースの認証ではなく、トークンベースの認証であることが特徴です。
それにより以下のようなメリットがあります。
- 直接IDやパスワードを入力する必要がないため、IDやパスワードが盗まれる心配がない
- トークンには限られた権限のみしか与えられないので、トークンが盗まれても被害が最小限になる
- トークンには有効期限が設定されており、トークンが盗まれても有効期限が切れると使用不可になる
最後に
今後ますますセキュリティ意識が高まってくるため、こういった認証まわりの技術は適宜インプットしていきたいと思います。
参考文献