コンテンツにスキップ

認証情報による分類@認証

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. セッションベース認証

セッションベース認証とは

セッションデータで認証情報を運搬する認証方法 (例:Form認証など) である。

システムの各コンポーネントがセッションデータを持つ必要がある。

セッションは有効期限が短く、漏洩した場合に脆弱性が高くなる。

作成と削除が頻繁に起こるコンテナでは、セッションデータが消失する可能性があるため、セッションベース認証とコンテナの相性は悪い。

いずれかのコンポーネントでセッションデータが消失しても復元できるように、SessionStorageを使用する必要がある。

セッションベース認証 トークンベース認証
Cookieヘッダーによる運搬 セッションデータを認証情報として、Cookieヘッダーで運搬する。セッションデータは、再利用のためにブラウザのCookieに保存する。
(例) Form認証など
トークンを認証情報として、Cookieヘッダーで運搬する。トークンは、再利用のためにブラウザのCookieに保存する。認証後にレスポンスのSet-Cookieヘッダーにトークンを設定する必要があり、さまざまなフロントエンドアプリケーション (SST、CSR、SSRなど) で実装できる。
(例) OAuth2、OIDC、SAMLなど
Authorizationヘッダーによる運搬 なし トークンを認証情報として、Authorizationヘッダーで運搬する。トークンは、再利用のためにブラウザのSessionStorageやLocalStorageに保存する。ブラウザのDOMを操作できるフロントエンドアプリケーション (CSRなど) で実装できる。
(例) OAuth2、OIDC、SAML、パーソナルアクセストークン認証など


認証方法の種類

  • JWTトークンによる認証
  • SSO


02. トークンベース認証

トークンベース認証とは

トークン (例:JWT仕様あるいはそうではないアクセストークン、IDトークンなど) で認証情報を運搬する認証方法 (例:SSO、パーソナルアクセストークンなど) である。

システムの各コンポーネントはトークンを持つ必要がない。

作成と削除が頻繁に起こるコンテナでは、トークンの消失を考慮する必要がなく、トークンベースとコンテナの相性は良い。

一方で、トークンは無効化が難しく漏洩した場合に脆弱性が高くなる、有効期限を短く設定する必要がある。

セッションベース認証 トークンベース認証
Cookieヘッダーによる運搬 セッションデータを認証情報として、Cookieヘッダーで運搬する。セッションデータは、再利用のためにブラウザのCookieに保存する。
(例) Form認証など
トークンを認証情報として、Cookieヘッダーで運搬する。トークンは、再利用のためにブラウザのCookieに保存する。認証後にレスポンスのSet-Cookieヘッダーにトークンを設定する必要があり、さまざまなフロントエンドアプリケーション (SST、CSR、SSRなど) で実装できる。
(例) OAuth2、OIDC、SAMLなど
Authorizationヘッダーによる運搬 なし トークンを認証情報として、Authorizationヘッダーで運搬する。トークンは、再利用のためにブラウザのSessionStorageやLocalStorageに保存する。ブラウザのDOMを操作できるフロントエンドアプリケーション (CSRなど) で実装できる。
(例) OAuth2、OIDC、SAML、パーソナルアクセストークン認証など


認証方法の種類

  • JWTトークンによる認証
  • SSO


トークン

▼ 種類

トークンには以下の種類がある。

Self-containedトークンでは、トークン自体に署名と有効期限が含まれている。

Opaqueトークンでは、トークンはランダム値で、署名と有効期限はDBで管理されている。

トークンの種類 認証 トークンの情報タイプ
アクセストークン OIDC IDプロバイダーのツールによってはJWT仕様 (例:Keycloak) なためSelf-containedトークン
IDトークン OIDC 必ずJWT仕様であり、Self-containedトークン
リフレッシュトークン OAuth2、OIDC Self-containedトークン、Opaqueトークン
パーソナルアクセストークン パーソナルアクセストークン認証 記入中...
XMLベースのトークン SAML 記入中...

▼ パーソナルアクセストークン

クライアントがパーソナルアクセストークン (個人用アクセストークン) の付与をリクエストし、認証フェーズは行わずに認可フェーズのみでユーザーを照合する。

AuthorizationヘッダーにPATを割りあてて、リクエストを送信する。

作成時以降、パーソナルアクセストークンを確認できなくなるため、クライアントがパーソナルアクセストークンを管理する必要がある。

POST https://example.com/foo
---
Authorization: <パーソナルアクセストークン>
サービス例 トークン名 説明
GitHub パーソナルアクセストークン HTTPSプロトコルを使用して、プライベートリポジトリにリクエストを送信するために必要。HTTPSプロトコルを使用する場面として、アプリケーションの拡張機能のGitHub連携、リポジトリのパッケージ化などがある。
- https://docs.github.com/ja/github/authenticating-to-github/creating-a-personal-access-token


03. APIキーベース認証

事前にAPIキーとなる文字列を配布し、認証フェーズは行わずに認可フェーズのみでユーザーを照合する認証スキームのこと。

信頼されたクライアントに発行することが前提のため、トークンよりも有効期限が長い (有効期限がない場合もある) 。

自前ヘッダーとして、x-api-keyヘッダーを定義する。これにAPIキーを割り当て、リクエストを送信する。

POST https://example.com/foo
---
x-api-key: <APIキー>


04. 証明書ベース認証

記入中...


05. チケットベース認証

記入中...


06. ワンタイムコードベース認証

記入中...