認証周りのコードを触っていて「claim」と「credential」という単語をよく目にします。 どちらも認証情報に関連する単語なイメージはありますが、ちゃんと理解できていなかったので調べて見ました。
Credential(クレデンシャル)とは
Credentialは本人確認のために使う「鍵」や「秘密の情報」を指す。
例えば次のようなものが代表例。
つまり、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、権限、トークン有効期限 | 
処理フロー例.
- ユーザーがCredential(ID / パスワード)を送る
- 認証サーバー(例: Cognito)が本人確認を行う
- 正常ならJWT(中にClaimsを含む)を発行
- クライアントはこのJWTを使ってAPIにアクセス 
- CredentialはJWTを取得するために使う 
- ClaimはJWTの中に入っているもの