見出し画像

【エンジニア】OAuthについて

これまで散々、概念メタファーとか、説明の粒度とか書いてきたけど

今回に関しては、技術、仕様の誕生の背景が自分の理解の一助になることになった。

OAuthとは?

よく巷でOAuthって聞きますよね。その特徴は以下の通りとなります。

1. 従来のID・パスワードベースとは異なるトークンベースの認証
2. トークンには限られた権限だけを与えられているので、万が一トークンが盗まれても被害が少ない
3. 認可コードフローなどによりトークンを安全に取得
4. トークンには有効期限が設定されており、万が一トークンを盗まれても有効期限過ぎると使えないので、セキュア

引用:https://tech-lab.sios.jp/archives/25470

OAuthの登場人物

認可サーバー
リソースオーナーを認証し、アクセストークンを発行するサーバーです。

リソースサーバー
アクセストークンによる保護対象リソースを格納・提供するサーバーです。

クライアント
リソースサーバーにアクセスして、アクセストークンを取得するクライアントです。

リソースオーナー
リソースサーバーで提供されるリソースの持ち主です。

引用:同上

地味にこういうのも、知識の整理には大切

ちゃんとしたドキュメントも一応見てみる(見るだけ)

IDとパスワード認証だと困ること

リソースオーナーは各サードパーティーごとにアクセス権を無効化することはできず, アクセス権を無効化する際にはすべてのサードパーティーが持つアクセス権を無効化しなければならない. つまりそれはパスワード変更を意味する.

これだけでも、セキュリティ向上とユーザフレンドリ、という背景が見えてくる。

こっちも結構わかりやすい↓

OAuth2.0 が、なぜ必要か?
ユーザーのリソースを利用したい3rdパーティアプリから、ユーザーのリソースに安全に(リソースを保持するサービスのユーザーID、パスワードを保持せず、)アクセスするため。
3rdパーティアプリが、ユーザーID、パスワードを保持している場合...
3rdパーティアプリが、悪意ある開発者によって作られたアプリである場合、ユーザーのデータに対してあらゆる操作を行うことができてしまう。
3rdパーティアプリが、悪意ある人物から攻撃を受けた場合、ユーザー名、パスワードが漏洩してしまう可能性がある。

タイミングによって、適切な(しっくりくる)言い回しや粒度は違うよね

この「1.」が今の自分の知識状況下では、理解のきっかけになるような気がしている。認証フローとか、技術的な側面は他にも色々詳しいサイトなどはあったが、「従来のID・パスワードベースとは異なる」という点が衝撃だったのである。単純に異なる、というより、問題解決の歴史的要請から成されたパラダイム、スタイルみたいなものの変革、つまりは、この技術、仕様の存在意義みたいなものが、今後の理解の助けになりそうなそんな気がしたのである。

これは常にそうだ、というわけではなく、これまでも書いてきた理解度や理解の体系に合わせて考えるべきメタファーとか説明の粒度の一つとして、今回は、この点が(人によっては当たり前だと思うけど)一番衝撃だった、という話。

この記事が気に入ったらサポートをしてみませんか?