什麼是聲明 (claim)?
聲明 (claim) 是一個用來傳達特定資訊的名稱值對。比如,在一個 JSON 對象中:
{
"sub": "foo",
"email": "[email protected]"
}
在這個例子中,sub 是一個表示主體識別碼的聲明,值為 foo,email 是一個表示電子郵件地址的聲明,值為 [email protected]。
我們使用 subject 而不是 user,因為如果沒有明確定義,主體 (
sub) 可以表示用戶、設備或任何實體。
聲明的用途
聲明廣泛用於各種上下文中,例如:
- JSON Web Token (JWT) : 在 JWT 中,聲明用於表示有關 token 的資訊,例如發行者 (
iss)、主體 (sub) 和過期時間 (exp)。 - OpenID Connect (OIDC) : 在 OIDC 中,聲明用於表示用戶資訊,如 ID token 和 Userinfo 端點 (Userinfo endpoint) 中的用戶電子郵件地址 (
email)、姓名 (name) 和頭像 (picture)。
標準聲明
在 JWT 和 OIDC 中,規範定義了一些標準聲明。常見的標準聲明包括:
iss: token 的發行者。例如,如果發行 token 的 授權伺服器 (Authorization server) 是https://example.com,那麼在大多數情況下iss聲明將是相同的 (https://example.com)。sub: token 的主體。它表示 token 所涉及的實體。例如,在 ID token 中,sub聲明通常表示用戶識別碼。aud: token 的受眾。它表明 token 所針對的接收者。例如,如果 token 是為了訪問位於https://api.example.com的 API,那麼aud聲明將是相同的 (https://api.example.com)。exp: token 的過期時間。它表明 token 何時不應再被接受處理。nbf: token 的 “not before” (不早於) 時間。它表明 token 何時開始被接受處理。iat: token 的簽發時間。它表明 token 的發行時間。jti: token 的 JWT ID。它為 token 提供一個唯一識別碼。
OIDC 還定義了其他用于用戶資訊的標準聲明。請參見 OIDC 規範中的 Claims 獲取更多詳情。
自定義聲明
除了標準聲明外,你可以定義自定義聲明來表示應用程式特定的資訊。例如,你可以包含一個 role 聲明來表示用戶在應用程式中的角色。
自定義聲明可以用 統一資源標識符 (URI) 命名空間來避免與其他聲明衝突。例如:
{
"https://example.com/claims/role": "admin"
}
在這個例子中,role 聲明用 https://example.com/claims/ 命名空間來確保唯一性。另外,你可以為自定義聲明定義自己的
統一資源名稱 (URN) :
{
"urn:example:claims:role": "admin"
}
在這個例子中,role 聲明用 urn:example:claims: 命名空間。