ClaimとCredential の違いについてメモ

認証周りのコードを触っていて「claim」と「credential」という単語をよく目にします。 どちらも認証情報に関連する単語なイメージはありますが、ちゃんと理解できていなかったので調べて見ました。

Credential(クレデンシャル)とは

Credentialは本人確認のために使う「鍵」や「秘密の情報」を指す。
例えば次のようなものが代表例。

  • ユーザー名とパスワード.
  • APIキーやシークレットキー
  • OAuthのクライアントシークレット.
  • 認証時にサーバーへ送るトークン.

つまり、Credentialは「ログイン時に提出する身分証明書」のようなもの。

Claimとは

Claimは「私はこういう人です」という主張の内容そのものを指す。
これは主にJWT(JSON Web Token)の中に含まれる情報で、ログイン後に発行されるトークンの中身。
例えば以下のような形が使われる。

{
  "sub": "user_123",
  "name": "user_name",
  "role": "admin",
  "exp": 1739977200,
}

この中のsubやroleなどが単数形でclaim、これらをまとめた構造体を複数形でclaimsと呼ぶ。

違いのまとめ

用語 意味 使うタイミング
Credential 認証のために提出する「秘匿情報」 ログイン前 パスワード、APIキー、クライアントシークレット
Claim/Claims 認証後に得られる「主張(情報)」 ログイン後 ユーザーID、権限、トークン有効期限

処理フロー例.

  1. ユーザーがCredential(ID / パスワード)を送る
  2. 認証サーバー(例: Cognito)が本人確認を行う
  3. 正常ならJWT(中にClaimsを含む)を発行
  4. クライアントはこのJWTを使ってAPIにアクセス

  5. CredentialはJWTを取得するために使う

  6. ClaimはJWTの中に入っているもの