V52: 自己完結型トークン
管理目標
自己完結型トークンという概念は 2012 年のオリジナルの RFC 6749 OAuth 2.0 で言及されています。これは事実上、受信側サービスがセキュリティ上の決定を行うために依拠するデータやクレームを含むトークンを指します。これは、受信側サービスがローカルでデータを検索するために使用する単なる識別子であるトークンとは区別されます。自己完結型トークンの最も一般的な例は JSON Web Token (JWT) と SAML アサーションです。
自己完結型トークンの使用は、OIDC/OAuth 以外でも非常に広まっています。同時に、このメカニズムのセキュリティは、トークンの完全性を検証し、トークンが特定のコンテキストに対して有効であることを確保する機能に依存しています。このプロセスには多くの落とし穴があり、この章ではアプリケーションがそれらを防ぐために備えておくべきメカニズムの詳細を具体的に説明します。
V52.1 トークンのソースと完全性
このセクションは、トークンが信頼できるパーティによって生成され、改竄されていないことを確認するための要件を含みます。
52.1.1
[修正, 3.5.3 から移動, レベル L2 > L1] 自己完結型トークンがデジタル署名または MAC を使用して検証され、トークンのコンテンツを受け入れる前に改竄を防いでいる。
1
v5.0.be-52.1.1
52.1.2
[追加] 特定のコンテキストでは、許可リストにあるアルゴリズムのみを使用して、自己完結型トークンを作成および検証している。許可リストには、許可されたアルゴリズム、理想的には対称アルゴリズムあるいは非対称アルゴリズムのいずれかのみ、を含めるべきであり、'None' アルゴリズムを含めるべきではない。対称と非対称の両方が必要な場合は、追加のコントロールで鍵の混乱を防ぐべきである。
1
v5.0.be-52.1.2
52.1.3
[追加] 自己完結型トークンを検証するために使用される鍵マテリアルは、トークン発行者の事前設定済みの信頼できるソースからのものであり、攻撃者が信頼できないソースや鍵を指定することを防いでいる。JWT やその他の JWS 構造では、'jku', 'x5u', 'jwk' などのヘッダは信頼できるソースの許可リストに照らして検証しなけれならない。
1
v5.0.be-52.1.3
V52.2 トークンコンテンツ
自己完結型トークンのコンテンツに基づいてセキュリティ上の決定を行う前に、そのトークンが有効期間内に提示されたこと、および提示された目的のために受信側サービスによって使用されることを検証する必要があります。これは、異なるサービス間や同じ発行者からの異なるトークンタイプでの安全でない相互使用を避けるためです。
OAuth と OIDC の具体的な要件については専用の章で説明します。
52.2.1
[追加] トークンデータに有効期間がある場合、トークンとそのコンテンツは検証時間がこの有効期間内である場合にのみ受け入れられる。たとえば、JWT ではクレーム 'nbf' と 'exp' を検証しなければならない。
1
v5.0.be-52.2.1
52.2.2
[追加] トークンを受け取るサービスは、トークンの内容を受け入れる前に、トークンが正しいタイプであり、意図した目的に適していることを検証している。たとえば、認可の決定にはアクセストークンのみを受け入れることができ、ユーザ認証の証明には ID トークンのみを使用できる。
2
v5.0.be-52.2.2
52.2.3
[追加] サービスはそのサービス (オーディエンス) で使用することを意図したトークンのみを受け入れている。JWT では、これはサービス内で定義された許可リストに対して 'aud' クレーム を検証することで達成できる。
2
v5.0.be-52.2.3
52.2.4
[追加] トークン発行者が同じ秘密鍵を使用して異なるオーディエンスにトークンを発行する場合、発行されるトークンには意図したオーディエンスを一意に識別するオーディエンス制限を含む。これにより、トークンが意図しないに再使用されることを防止している。オーディエンス識別子は動的にプロビジョンされる場合、トークン発行者はこれらのオーディエンスを検証して、オーディエンスのなりすましが発生しないようにしている。
2
v5.0.be-52.2.4
参考情報
詳しくは以下の情報を参照してください。
OWASP Cheatsheet - JSON Web Token Cheat Sheet for Java (なお役に立つ一般的なガイダンスがあります)
Last updated
Was this helpful?