認証周りについてメモ
firebase authentication
ユーザー認証機能を提供し、ユーザ情報をクラウドで保存してくれる、Google運営のサービス。
セキュリティリスクを回避できることや、さまざまな認証方法に対応していること、重要情報をクラウドに預けることによる安全性の向上など、さまざまなメリットがあります。
OAuth 2.0
サービスのユーザーが、サービス上にホストされている自分のデータへのアクセスを、自分のクレデンシャルズ (ID & パスワード) を渡すことなく、第三者のアプリケーションに許可するためのフレームワーク。
以下のサイトがとてもわかりやすいです。
一番分かりやすい OAuth の説明 #OAuth - Qiita
jwt
「JSON Web Token」の略で、Webアプリケーション間で情報を安全にJSONオブジェクトとして交換するためのコンパクトでURLセーフな手段を提供する。ヘッダ、ペイロード、署名の3つから成る。
流れの参考:【JWT】 入門 #認証 - Qiita
自分で実装する場合は以下参考。ただし、勉強のために実装するのはありかもしれませんが、セキュリティ面で考慮すべきことが多く、基本は外部サービスを使う方が良さそうです。
【Go】RedisとJWTでログイン認証システムを作ってみた話
GoでJWTを使って認証してみる #Go - Qiita
Go言語でJWT認証をやってみた!
SSO
Single Sign On、1度のユーザー認証で業務アプリケーションやクラウドサービスといった、複数のシステムの利用が可能になる仕組みのこと。 ref: https://www.ntt.com/bizon/glossary/e-s/sso.html
認証
誰であるか(Who one is.)を扱う。本人確認のこと。
認可
誰が誰に何の権限を与えるか(Who grants what permissions to whom.)を扱う。(「誰が」を決める処理が「認証処理」であるため、認可処理にはその一部として認証処理が含まれている)
わかりやすいサイト:
OAuth 2.0 + OpenID Connect のフルスクラッチ実装者が知見を語る #OAuth - Qiita
MFA
多要素認証のこと。アプリケーション、オンラインアカウント、VPNなどのリソースへのアクセスを許可する前に、ユーザに2つ以上の認証要素の提供を求める認証方法です。MFAは、強力なIDおよびアクセス管理(IAM)ポリシーのコアコンポーネントです。MFAは、ユーザ名とパスワードだけでなく、1つ以上の追加の検証要素を要求します。これにより、サイバー攻撃が成功する可能性を小さくできます。
ユーザ名とパスワードは重要ですが、ブルートフォース攻撃に対して脆弱であり、第三者に盗まれる可能性があります。親指の指紋や物理的なハードウェアキーといったMFA要素の使用を強制することで、組織はサイバー犯罪から安全に守られているという自信を高めることができます。ユーザに求められる最も一般的なMFA要素の1つは、ワンタイムパスワード(OTP)が挙げられます。
Basic認証
HTTPに元々用意されている認証機能の一つ。簡易的な認証方式で、Webアプリケーションの特定のページやファイルに対して手軽にアクセス制限をかけることができます。
Basic認証によりアクセスが許可されるまでの流れ
- Basic認証でアクセス制限がかけられたページに、ユーザーがアクセスを試みる。
- アクセス制限がかけられているため、Webサーバーはブラウザに対して認証が必要であることを知らせる。
- 画面にダイアログが表示され、認証情報(IDとパスワード)の入力が求められる。
- 認証情報が正しいと認められれば、ページへのアクセスが可能となる。認証情報はブラウザに保存され、それ以後のアクセスでは認証情報が自動で送信される。
しかし、認証情報(IDとパスワード)はBase64でエンコードされてブラウザに保存されるのですが、パスワードが容易に復号されてしまう可能性があり、Basic認証は一般的には現在はあまり利用を推奨されていないようです。