疑問に思った背景
Basic認証が危険な理由として「クレデンシャルを直接クライアントからサーバに送るから」という話がある。 確かに、Basic認証はAuthorizationヘッダーにクレデンシャルをエンコードして送りつける。 なんらかの方法でクレデンシャルが盗まれたら(例えばTLS化していない通信で盗聴されたり、サーバに保存されているクレデンシャルがクラックされたり)、即座にサーバにある大事な情報が暴露される。
では、なぜOAuthとかの認証認可フレームワークを使えば、Basic認証よりも安全になるんだろうか?
自分が調べた感じ
一言で言えば「認可サーバがアクセストークンを発行し、アクセストークンの検証を行うから」だと思う。 具体的には、クライアントと認可サーバがクレデンシャルのやり取りをし、認可サーバがアクセストークンを発行する。サーバはクライアントから送られたアクセストークンを認可サーバに確認する。
つまり、発行と検証のステップを認可サーバに移譲することで、クライアントとサーバの通信でクレデンシャルを直接扱わないようにしている。 サーバはクレデンシャルを保存しなくて良くなるし、もしアクセストークンが盗まれてもそのトークンは期限付きのものであるため被害を多少は抑えられる。 だから、Basic認証よりも安全なのだろう。