サンゴラボ

4年目ソシャゲエンジニア

認証と認可、OAuthとか

業界的にOAuth知らないとこの先生き残れなそうなので現在勉強中です。
OAuthについて調べてると、認証と認可という単語がたくさん出てきてごっちゃになるので、言葉の定義から整理してみました。

■認証と認可の違い

参考:認証と認可の違い

簡単にまとめると

  • 認証(Authentication):本人確認
  • 認可(Authorization):リソースへのアクセス権限の付与

認証と認可は全然違うことがわかった!英単語も違う。また、認可するには認証が必要ということも理解した。

■認証には2種類ある

参考:認証には2種類ある

上で認証をAuthenticationとしてたけど、実は情報セキュリティにおける認証には2つあるらしい。

  • Authentication(2者間認証)

認証者と被認証者が事前に共有している情報を確認すること。ユーザIDとパスワードによるログインなど

  • Certification(3者間認証)

認証局が発行した証明書により持ち主の正当性を確認すること。

日本語ではどちらも認証なので、ややこしいことになってる。

■OAuth

参考:APIアクセス権を委譲するプロトコル、OAuthを知る

OAuthはAPIアクセス権を委譲するプロトコルである。リソースへのアクセス権限の付与なので、OAuthは認可の技術ということになる。

OAuthのプロトコルについては参考記事で十分に説明されているので割愛。

通常のOAuthでは、サービスプロバイダ、コンシューマ、ユーザの3者が登場する。OAuthプロトコルで定義されているのは、APIへの接続内容をサービスプロバイダ側で確認するのに必要なトークンの発行とそのやりとりの方法だけである。また、認可の技術なので、認証が必要になるのだが、認証手段については定義されていない。

■2-legged OAuthと3-legged OAuth

ここらへんから複雑になってくる。僕の理解では

  • 2-legged OAuth:2者間でのAPI認可フロー
  • 3-legged OAuth:3者間でのAPI認可フロー

つまり、OAuthを使った3者(サービスプロバイダ、コンシューマ、ユーザ)によるAPI認可フローのことを3-legged OAuthと呼ぶ。そして、ユーザを省いた2者間でのAPI認可フローのことを2-legged OAuthと呼ぶ。

2-legged OAuthの実装については以下がとても参考になる。3-legged OAuthはわからんw