OAuthって結局、何?認証と認可?なんて読む?実体は何で、どう動いてて何をして何をしないの?

この記事は
OAuthのフローとか、なんとなくの処理手順はわかるんだけど、だから結局OAuthってそれ本体は何で何がどうなってそうなってるの?としっくりこない人のための解説記事です。

目次

OAuth(オーオース)

オーオースって読むんですね。ずっと読めなかったw

読み方を知るだけでも少し理解が深まります。

OAuthを使ってる場面

-「Googleでログイン」

-「Appleでサインイン」

-「LINEで認証」

-「X(旧Twitter)連携でアカウント作成」

よく見かけるこれらがOAuthを使ったログイン方法。

サイトAにログインする時、サイトAにユーザー登録しなくてもGoogleやLINEのアカウントを使ってログインできたり、Xのデータを参照できる。サイトAにこのユーザーのこの範囲のデータを使っていいですよって許可する処理の規格がOAuth。

厳密には、「GoogleやLINEのアカウントを使ってログインできる」機能は、OAuthを基盤として拡張されたOpenID Connect (OIDC) という規格が主に担っていますが、OAuthがその認可の仕組みを提供しています。

で、OAuthって何?

規格(プロトコル)の1つ

物理的な何かではないしソースコードでもソフトウェアでもありません。

GoogleやX(旧Twitter)のような大規模なサービス(プラットフォーム)が、外部のアプリケーションに対して提供する仕組み。

具体的には、GoogleやXなどの大規模サービスは、OAuthの文脈において、認可サーバー機能 (Authorization Server)とリソースサーバー機能 (Resource Server)という2つの重要な役割と機能を提供しています。

規格(プロトコル)なので、文書です。公式がこちら

一般的に使われるBearer Tokenのプロトコル(文書)はこちら

OAuthが「パスワードを渡さずにアクセス許可」するってどういう意味?

フローの中で、OAuthを提供しているサービスのアカウント(例えばGoogleやLINE)にはログインする必要があるのでOAuth提供サービスのパスワードを使う必要があるが、OAuth提供サービスのパスワードをOAuth利用サービスに入力はしていない=OAuth利用サービスにパスワードを渡していない、ということ。

OAuthが登場した目的はパスワードを第三者に渡さず、”必要最小限の権限だけ”を外部アプリに委譲できるようにすること。

OAuthの言葉の使い方

  • アプリAが「Googleアカウントでログイン」のようにOAuth提供サービスを使っている場合「OAuthを使っている」のように使います
  • TwitterのAPIにアクセスするためにOAuthの仕組みを利用しているのように表現します
  • GoogleやTwitterなどは外部アプリに対して安全なアクセス方法(OAuth)を用意しているので「OAuthを提供している」といいます。

OAuthは「認証」ではない

認証と認可という登場人物がいます。

  • 認証(Authentication)=「あなた」が誰かを確かめる
  • 認可(Authorization)=「あなた」が何を許可するか決める

OAuthが扱うのは認可だけです。

しかし、OAuthを使うフローの中で、OAuth提供サービスのアカウントへのログイン画面が表示され、OAuth提供サービスのアカウントへログイン(認証)することが必要なため、OAuth=認証、と誤解されがち。

OAuthのAccessTokenは本人確認の証拠ではない

OAuth提供サービスが発行するアクセストークンは「誰宛に発行したものか」という情報を持たない。

そのため、そのトークンを利用してOAuth提供サービスのデータにアクセスした場合、そのトークンを利用してアクセスしたことはわかるが、誰がそのトークンを利用してアクセスしたかがわかりません。

つまり攻撃者にトークンが盗まれOAuth提供サービスに不正ログインされても、不正ログインだとわからないという問題があります。

これらのセキュリティ問題を埋めるためにOIDC(OpenIDConnect)が誕生します。

続きは別記事へ。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

ピープル大学(UoPeople)でコンピューターサイエンスを学んでいます。趣味はプログラミング。

コメント

コメントする

目次