ID / 認証 / 認可

はじめに

なにがしか新しいシステムを提供する場合、まず最初に決めなければならないことは、「そのシステムは Tracking したいのか、あるいは、ID を付与したいのか」を決定することである。

Tracking の特徴

  • 個人情報に相当するようなデータを取得しない
  • 個人を追跡できるように永続的ではない ID を発行し引き回す(永続的な場合もある)(以降、Tracking ID と呼ぶ)
  • 一般には UUID を利用する
  • 主に広告系のテクノロジの話をする際に使用する ID はこちら
    • サービス例: Google Ad Sense, Google Analytics

ID の特徴

  • 個人情報に相当するようなデータを取得する
  • 個人を追跡できるように永続的なIDを発行し引き回す
  • 一般には整数値を利用する
    • 整数値のオプションとしては以下の様な選択がなされることが多い
    • 10進数として表出 : 16 進数として表出 : UUID として表出
    • 連続した整数を払い出す : 非連続な整数を払い出す(通常は攻撃に強いこちらを選択)
  • 主に何がしかのサービス提供主体の話をする際に使用する ID はこちら
    • サービス例: Facebook, Twitter

ID を取り扱うシステムの場合は、ID を発番するにあたり認証・認可の話とセットでシステムを実現する必要があるので、通常は OAuth2.0 でいう Authorization Server あるいは Open ID Connect でいう OpenID Provider を実装することになる。

Tracking ID を使うのか ID を使うのか、あるいは両方なのかを決定後、以下の順番で対応をすすめる

  • 最初にこれから生み出す新しいサービスの IdP の仕様を決定する。
  • IdP から発行された ID に対してどのように他のデータを紐付けるかの仕様を決定する。
    • Tracking ID / ID 両方使う場合は N : N で紐付ける前提にする
    • 一人の人が色々なデバイスから一つのサービスを利用するのが当たり前の現在においては必ず N : N になる
    • 一般的に IdP の API は以下のようになる
    • oauth ベースのトークン発行関連(省略)
    • generateIdetifier
      • 仕様を満たす ID を生成して返す
    • attachExternalIdentifier
      • generateIdentifier で生成された ID に対して紐付けたい ID を登録する
    • getByIdentifier
      • ID => 紐付けた ID 群を取得する
    • getByExternalIdentifier
      • 紐付けたID => ID 群を取得する
  • 一般的に IdP のシステムに格納されるデータは以下の要件を満たすことになる
    • application テーブル
    • IdP にアクセスするアプリケーションの証明書とトークンのセットを管理するための概念を格納する何か
    • 正引きテーブル
    • ID => 紐付ける ID 群を引くための何か
    • 逆引きテーブル
    • 紐付けた ID => ID を引くための何か
  • (IdP システムのデータベースエンジンとしては RDBMS か KVS を用いることが多い)

このようなシステムになっているとシステム依存しない ID が取り回せるようになり、疎結合なサービス連携が可能になり、生存期間の長いシステムを構築することができる。

ID に関連する仕様

OAuth 2.0

Open ID Connect

Share this post:
Child pages:

Comments