こんにちは!スタッフ19号です!
前回セキュリティについての話を書いた時に「多要素認証」という言葉が出ていたのですが、あれ?そういえば「認証」ってどういう意味だっけ?「認可」っていう言葉も聞いたことがあるけど違いって何だろう?と思ったので、今回は、認証認可らへんの話をしたいと思います。
「認証」と「認可」の違い
「認証」
認証とは、通信の相手が「誰(何)であるのか」を確認・特定すること
認証には、ID・パスワードを使用する知識情報による認証、顔や指紋などを使用する生体情報による認証、SMSを使う所持情報をによる認証などがある
「認可」
特定条件下において、対象物(リソース)を利用可能にする(アクセス)権限を与えること
ということでした!
認証認可について調べていると、「OAuth」という言葉が出てきたので、どのようなものかこれも調べてみました。
OAuthとは
ユーザーが製品/アプリを承認して、別の製品/アプリ内に保存されているリソースにアクセスできるようにする認可のプロセスです
OAuth のプロセスでは、サードパーティサイトで認証されたユーザーに許可判断されると発行される「アクセストークン」と呼ばれる情報を使用します
なんか難しそう・・・。
これだけでは分からなくていろいろと調べて分かったことは
OAuthがなければ、アプリからリソースサーバーに「ユーザーの情報をください!」というと、「はい、どうぞ」と渡してしまうため、もしそのアプリが悪意のあるアプリだった場合大変なことになってしまう。
それを防ぐために作られたものらしいです。
具体的に何をするのか、図と文字で分かりやすく説明してくれているのを見つけたのでそれをお借りします!
まず、webサービスやアプリなどのクライアントから認可サーバーに対してアクセストークンの発行の要求を行います。認可サーバーとは、アクセストークンを生成するサーバーです。認可サーバーはアクセストークンの発行の要求をされたら、ユーザーに対してアクセストークンを発行していいかどうか問います。ユーザーからの許可が出たら、認可サーバーはアクセストークンを生成します。そして、アクセストークンをクライアントに対して発行します。クライアントは発行されたアクセストークンを持ってデータの委譲を要求します。リソースサーバーは、APIを介してアクセストークンが正しいものか検証します。認可されれば、APIを介してデータが渡されます。このアクセストークンの要求とその返答を標準化した技術がOAuthです。
https://solution.kamome-e.com/blog/archive/blog-auth-20221108/
たしかに、アプリとリソースサーバーのやり取りだけでなく、認可サーバーを入れることで、安全性が増す感じがしますね!
でもここで注意があるみたいです!
あくまでOAuthは認可のものなので、認証に使用すると危険!ということは覚えておきましょう!とのことです。
認証に使用というのは、例えば、Instagramで写真を投稿したときに、TwitterにログインすることなくInstagramで上げた写真にコメントを付けてTwitterに投稿できるというようなことです。
でもこれってしたことある気が・・・。え?大丈夫?と不安になったのですが、この問題を解決できる方法があるみたいです!
それは、OAuthの仕組みにプラスして、更に認証も出来るようにしたもので「OpenID Connect」というものがあるそうです!
「OpenIDConnect」気になる・・・。
でもそれも話したら長くなると思うので、また今度「OpenIDConnect」の話しが出来たらいいなと思います。
以上!スタッフ19号でした。