OAuth 2.0 とはなにか
- ひとことでいうと、認可プロトコルで、本質は委譲
- OAuth は 認可 (authorization) 誰が誰に何の権限を与えるか の仕様であり、認証 (authentication) 誰であるか の仕様ではない
- なんの委譲かというとid/passの認証情報の委譲
- 委譲した証がトークン
- 例えていうと、Webにおけるバレットキー(Valet Key)
- バレットキーとは駐車係が車を預かるサービスで使われる制限をかけたキーのこと(トランクやグローブボックスを開けないなど)
- ポイントは、車の所有者が駐車係に実際の車の鍵ではなく、バレッドキーを渡すこと。駐車係は、バレットキーを使って、車を駐車する
- OAuthでいうと、所有者がクライアント(APIを利用するソフトウェア)にid/passの認証情報ではなく、トークンを渡す。クライアントは、アクセストークンを使ってAPIリソースにアクセスする。認証情報を使って、所有者のふりをするのではなく、
id/passの認証情報=車の実際の鍵
トークン=バレットキー
クライアント=駐車係
APIリソース=車
- OAuth2.0の仕様をみてみると、
https://openid-foundation-japan.github.io/rfc6749.ja.html
OAuthは, 認可レイヤーをもうけてクライアントとリソースオーナーの役割を分けることで, 従来の問題の解決に取り組む. (従来の問題というのは、主に、第三者のアプリケーションのユーザーの id/passの認証情報を共有していたこと。保護されたリソースにアクセスする為にリソースオーナーのクレデンシャルを使う代わりに, クライアントはアクセストークンを取得する. アクセストークンとは, ある特定のスコープ, 期間およびその他のアクセス権に関する情報を示す文字列である. →誰が誰に何の権限を与えるかの認可 (authorization) の情報を持つ。
ここで、重要なのは「第三者のアプリケーションのユーザーに id/passの認証情報を共有しない」という点
まとめ
- 改めて、OAuthとはなにかというと、トークンの発行と検証(署名と検証)に関すること
- クライアントからみると、トークンの取得と使用
- 基本的に、認証情報からトークンをつくること
- 駐車係が車を預かるサービスで使われるバレットキーに例えると、
- 所有者の車の鍵からバレットキーをつくること
- 駐車係からみると、バレットキーを受け取って、駐車
Open ID Connectについて
- OAuthの認可を認証に拡張したのが、Open ID Connect
- 誰であるかという認証 (authentication) の情報を持つ