🦔

OAuthの基礎学習

2023/12/09に公開

はじめに

OAuthはいろんなサービスで利用されている技術だが、いまいち全体像を把握できていない。
そこで勉強を兼ねてOAuthについて学習をしてみようと思う。
※OAuthは範囲が非常に広いため、基礎的な内容を記載していく。

前提知識

OAuthを調べていく中で、認証と認可の言葉がよく出てきたので、メモしておく。

  • 認証

    • ユーザーを確認して身元を特定すること
  • 認可

    • 認証で特定したユーザーの行動範囲を決めること(登録はできるが削除できないなど)

OAuthとは

OAuthは認可を行うプロトコルのことで、具体的にはアクセストークン(リソースサーバー内のデータを使用してどこまで操作していいのか権限を表す)を使用してユーザーがリソースサーバー(ユーザーの情報が格納されているサーバー)の資源を使用していいかを検証します。
アクセストークンは認可に使われるもので、どのようなアクセス権限を持っているのかを示すことができます。

①アクセストークンの発行リクエストを行う
②ユーザーにアクセストークンを発行してもいいか確認する
③ユーザーからアクセストークン発行承諾の連絡をもらう
④アクセストークンを発行
⑤アクセストークンを使用してリソースサーバーにデータを要求する
⑥アクセストークンを検証し、正しいアクセストークン&アクセス権限があればユーザーのデータを返却する

OpenIDとは?

OAuthを調べているとOpenIDを出てきたので調べてみた。
OpenIDはOAuthとは異なることを指している言葉で、前提知識で記載した認証の箇所を指している。
具体的には、認証用のIDやパスワードで複数のサービスをログインできるようにIDやパスワードを共通化することで、ユーザーが複数のサービスに別々にユーザー登録をするわずらわしさを防ぐための仕組み。

OAuthとの違い

OpenIDでは、連携して機能する複数のWebサービスのユーザーが同一人物であることは判定できるが、Webサービス間でどのユーザーリソースに対してアクセスできるか、また、どのような操作ができるかという認可を行うことができない。
OAuthは認可、OpeanIDは認証のプロトコルを指すと認証しておけば基礎レベルではいいと思う。
またOAuthとOpeanIDのプロトコルを使用して、OpenID Connectという仕組みができている。
(GoogleやMicrosoft、SalesForceなどでも使用されているよう)
OpeanID Connectの仕組みを以下の図に記載する

①IDトークンとアクセストークンの発行リクエストを行う
②ユーザーにIDトークンとアクセストークンを発行してもいいか確認する
③ユーザーからIDトークンとアクセストークン発行承諾の連絡をもらう
④IDトークンとアクセストークンを発行
⑤IDトークンとアクセストークンを使用してリソースサーバーにデータを要求する
⑥IDトークンとアクセストークンを検証し、正しいユーザーであること&アクセストークン&アクセス権限であればユーザーのデータを返却する

まとめ

OAuthについて基礎的なところの学習をしてみたが、概念の理解はできたと思う。
後は実際に実装を行なってみてさらに知見を深めていきたいと思う。

参考サイト

https://solution.kamome-e.com/blog/archive/blog-auth-20221108/

https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be

https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe

Discussion