こんにちは、ソフトウェアエンジニアの小野寺です。
今回は認証と認可の違いについて書いていきたいと思います。 ログイン機能やAPI連携などで認証・認可周りが出てきますが、違いが理解できていなかったので調べてみました。 まずは日常を例にして認証と認可の違いを比べてみます。
認証:誰であるかを明らかにすること
認証について。認証はあなたが誰であるかを明らかにすることです。 例えばマイナンバーカードは名前や性別、生年月日が記載されていて、あなたが誰であるかを明らかにします。マイナンバーカードは認証の証明書なわけです。ただし、マイナンバーカードを持っているだけで何かができるわけではありませんね。
認可:リソースアクセス権限を与えること
次に認可について。認可は特定条件においてリソースアクセス権限を与えることです。 例えばバスの乗車券。バスの乗車券を持っていればバスに乗車ができます。当たり前ですね。あなたが誰であるかは関係がありません。乗車券を購入するときに名前も生年月日も不要ですし、乗るときも不要です。乗車券を持ってさえすればバスに乗ることができます。乗車券はあなたが購入してもいいし、友人が購入した乗車券を使ってもいい。乗車券は認可の証明書です。
認証と認可は全く別物なのですが、実際にはこの2つは密に絡んで使われるケースがほとんどです。 例えば、
- 運転免許証はあなたが誰であるかを証明するし、自動車運転の権限を与える
- iPhoneの指紋認証はあなたが誰であるかを証明するし、iPhoneを操作する権限を与える。
認証+認可です。
ソフトウェアで考えてみる
ソフトウェアで考えてみたいと思います。 ログイン機能はメールアドレス、パスワードを入力してあなたが誰であるかを明らかにします。つまり認証です。そしてログイン後は投稿や商品購入の権限が与えられます。認可です。認証と認可が密に絡んでいますね。
認証・認可のセットケースが多いですが、認可で実現可能な機能として、比較的パブリックなAPI連携があるかと思います。アクセストークンを発行するときに認証は求められますが、API連携自体は認可の仕組みだけで実現しているのではないかなと考えております。 実際に私が最近利用したQiitaAPI(Qiitaの記事一覧を取得するAPI)はアクセストークンを発行して、Authorization ヘッダを使ってやりとりすればQiita記事の一覧が取得できます。
発行したアクセストークンさえ知っていれば誰であっても使えるはずです。アクセストークンを発行した人が僕なだけです。
認証、認可周りはセキュリティも大きく関係するので慎重な実装が求められますが、外部サービスと連携できればサービスを大きくするきっかけにもなるので仕組みを理解した上で活用していくとよいのではないでしょうか。 おわり。
イノベーター・ジャパンではエンジニアを募集しています。
【参考】