先日LTさせていただいた時に、聞き手の頭をはてなまみれにしたOAuthについて一般の人向けにも解説してみます。
免責事項
この内容は学校法人角川ドワンゴ学園および、学園の公式としての文章ではありません。
なお、この記事は学内LTの内容を非エンジニア向けにふわっと概要を掴んでいただくために書いてあるものですので、厳密には違う表現が含まれています。
そういった点に関しては後日訂正したりしなかったりするのでご了承ください。
なお、現在、デジタルサークルUniProjectでは、UniQUEという、OAuth2.0(OpenConnectID)統合認証基盤を開発中です。
よければ、Discordサーバーに入って、メンバー登録をして、一緒に開発を進めてくれれば幸いです。
OAuthとは、一言で言うと、ズバリ、サードパーティ製のアプリに対してIDやPWを直接渡すことなく認証を通す方法の規格のことです。
これだけ言われると「は?」だと思うので、噛み砕いていきましょう。
サードパーティ製のアプリとは
サードパーティ製のアプリとは、なんぞやって言う話だと思うのですが、例えば、こういうものがあります。
- TwitterCircle
- QiitaのGitHubでログイン
- SpotifyのAppleでログインや、Facebookでログイン、Googleでログイン
などなど...
これらの
- TwitterCircle
- Qiita
- Spotify
がサードパーティ製のアプリケーションです。
つまりどういうことかというと、別のシステムやサービスから情報を取得したり、操作したりするアプリケーションのことを指します。
Spotifyであれば、Googleでログインすると、Googleからメールアドレスなどの情報を取得してきているわけです。つまり、Spotify以外の別のシステムやサービスから情報を取得しているわけです。
他にも、Twitterのサードパーティ製のアプリだと、フォロワーの一括削除ツール、ツイートの一括削除ツールなどもありますよね?それは、別のシステムやサービスを操作していることになりますよね?
そういうことです。
IDとPW渡したらあかんのか
そんなことをしたらあかん理由は2つあります。
乗っ取られる
操作してもらうんだから、認証情報渡さないとだよね、IDとPW渡そうね、というのは間違いです。
そんなことしたら、アプリの開発者もIDとPWはログから見れるので乗っ取られます。
権限を制限できない
IDとPW渡したらフルコントロールを許可することになります。
なので、OAuthにはスコープという概念があり、どのデータを参照できるか、どの操作ができるかを制限しています。
権限を剥奪できない
IDとPWを渡したら、権限を途中で変更したり削除することができませんよね。
PWを変更するにしても、Aというアプリの権限のみ削除したいのにBというアプリも権限がなくなるので、再ログインが必要になったり、めんどくさいです。
なので、IDとPWを直接渡さない、権限を制限したPWのようなものを渡します。
そうすれば、トークンに対してのIDで識別し、権限変更や削除、無効化などが容易になります。
その権限を制限したPWのようなものを、トークン(TOKEN)、それを安全にサードパーティ製アプリに渡す仕組みをOAuthといいます。
OAuthの通信の順序
OAuthの通信順序ですね。
規格で決まっているのは1-4の流れですが、必然的にその後も決まってきます。
- サードパーティ製アプリがOAuthの認可サーバーに対して要求
- ユーザーに「このアプリに権限を与えますか?」みたいな画面が出る
- ユーザーが許可する
- トークンを生成し、サードパーティ製アプリケーションに送信する
(この場合、tokenが露見することを防ぐために、有効期限が短期間なcodeが使われることが多いがここでは割愛) - アプリケーションがトークンを使ってアプリケーションに対してリクエストを投げる
- 電子署名なりで認証サーバーが認証し、リソースサーバーへ通信を通す
- リソースサーバーはデータを返す
- (トークンが期限付きで、リフレッシュトークンがあれば)期限が切れたトークンを破棄し、リフレッシュトークンというトークン再発行にのみ使えるトークンを用いて新しいトークンをもらう
こんな感じですね。
登場人物として、
- リソースサーバー - データを保存していて、DBと通信したりすることもある
- 認可サーバー - ユーザーが許可すれば、トークンを発行する
- 認証サーバー - トークンの有効性を検証し、リソースサーバーへ通信を通すかを判断する
というのがありますが、これらは統合されて開発されることもあります。
現にUniQUEもそうですね。
まとめ
OAuth考えた人天才!!
では、また...
最後に...
冒頭でも書きましたが...
UniQUE開発者募集中
現在、UniQUEという、OAuth認証基盤を製作中です!
他にも、デジタルサークルUniProjectでは、プログラマーだけでなく、
- 音楽制作
- プログラミング
- 映像制作
- デザイン
- 3Dモデリング
- ゲーム制作
などなど、デジタル創作活動に興味がある人をゆるーく募集しています!!
お金は一切かかりません!活動義務もありません!!
どうぞお気軽に...!!
HP:
GitHub:
Discord: