そもそもOAuthとは何なのか?
読み方はオーオース、オースなど。
主にwebサービスなどにおける認可の仕組みのデファクトスタンダードとなっています。
OAuthには1.0と2.0が存在しますが、単純にOAuthといった時、多くの場合それはOauth2.0のことを指します。
認可とは何か?
認可とは権限の委譲のことを指します。
権限の委譲とは「あるユーザー」が「ある資産」に対して「特定の操作」を行うことを許可することです。
例えば、Googleドライブから画像をダウンロードして編集できるサードパーティー製のアプリがあるとします。(※サードパーティー製…Googleと関係ない第三者が作ったもの)
その場合、それぞれの対応は以下のようになります。
ユーザー | 画像編集アプリ |
---|---|
資産 | Googleドライブの画像 |
操作 | 画像のダウンロード |
認証と認可の違い
「認可」とよく似た概念として「認証」というものがあります。
両者の違いは以下になります。
認可 | あるユーザーに特定の操作の権限を与えること |
---|---|
認証 | あるユーザーが本人であることを確認すること |
例えば、あるユーザーはデータの閲覧、編集、削除権限があるとします。
認証を行った場合、ユーザーは全ての操作を行うことができます。
一方、認可では、閲覧のみ、編集のみといったように、権限の範囲を絞ることができます。
OAuthがあると何が良いのか?
ここまでで、おおよそOAuthの役割が理解できたかと思います。
しかし、そもそもなぜOAuthという仕組みが必要なのでしょうか。
これを理解するには、OAuthが無い場合に起こり得る問題を考えてみると理解しやすいです。
悪意あるアプリケーションによる被害範囲を狭めることができる
OAuthが存在しない場合、アプリケーションにユーザー名とパスワードを教えることになります。
アプリケーション内でユーザー名とパスワードを使用して、ユーザー認証を行って操作をするわけです。
認証する=すべての権限を有する、ということになります。
もし、このアプリケーションが悪意のある第三者によって開発されたものだった場合、データが悪用されてしまう可能性があります。
たとえば、外部サーバに転送される、勝手に削除される、暗号化されて身代金を要求される…、などなど。
認可の仕組みを使えば、アプリケーションの権限範囲を絞ることができます。
これにより、完全に被害を防ぐことはできませんが、影響の範囲を狭めることができます。
悪意あるアプリケーションのアクセス停止が楽になる
IDとパスワードを渡したアプリケーションが悪意のあるものだと発覚したとします。
この場合、そのアプリケーションによるデータへのアクセスを停止する必要があります。
これを防ぐには、パスワードを変更する必要があります。
IDとパスワードを教えているアプリケーションが1つだけならば問題ないですが、複数ある場合面倒なことになります。
悪意あるアプリケーションのためにIDとパスワードを変更してしまうと、他の正常なアプリケーションに登録しているIDとパスワードも更新する必要が出てきます。
そうしたアプリケーションが複数あると、変更作業が非常に面倒です。
OAuthの仕組みを使えば、悪意あるアプリケーションに委譲している権限をピンポイントではく奪するといったことが可能になります。
つまり、他の正常なアプリケーションに影響を与えずに、悪意あるアプリからのアクセスのみを停止することが可能になります。
ID、パスワード流出のリスクを低減できる
アプリケーションにIDとパスワードを渡してしまうと、アプリに脆弱性があった場合に流出してしまう可能性があります。
OAuthの仕組みを利用すれば、アプリケーションにIDとパスワードを持たせる必要がなくなりますので、流出の心配がなくなります。