0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Auth0 アクセストークンバリデーションメモ

Posted at

  • Auth0が発行するアクセストークンのバリデーション方法についてメモする。

バリデーションの流れ

1. JWT標準検証

※Auth0が発行するアクセストークンはJWT形式となっている

  • アクセストークンの有効期限や署名、issuerなどの妥当性を検証する。
    • ライブラリを使用して実装することを推奨。

2. Audienceクレームの検証

  • トークンに含まれるオーディエンス(aud)クレームを検証する。
    • aud値が呼び出し対象API 設定のIdentifierに設定された値と一致していることを確認する。

3. Scope()の検証

  • トークンに含まれるスコープ(scope)クレームを検証する。
    • scope値に指定された値が呼び出し対象API設定のPermissionsに定義された値と一致していることを確認

Pythonコード例

  • ライブラリPyJWTを使用
# OpenID ConfigurationエンドポイントからJWKSエンドポイントURLを取得
oidc_config_endpoint = {YOUR_TENANT_URL}/.well-known/openid-configuration
oidc_config = requests.get(
    oidc_config_endpoint
).json()
signing_algos = oidc_config["id_token_signing_alg_values_supported"]

jwks_client = jwt.PyJWKClient(oidc_config["jwks_uri"])

# token: 検証対象アクセストークン
# api_identifier: アクセス対象API識別子(API定義に指定したIdentifier値)
# issuer: テナントURL
# api_scope_list: アクセス対象APIスコープ(API定義に指定したPermissions値)
def validate_token(token: str, api_identifier: str, issuer: str, api_scope_list: list):
    # JWKSエンドポイントから公開鍵取得
    signing_key = jwks_client.get_signing_key_from_jwt(token)

    # 1. JWT標準検証
    # 2. Audienceクレーム検証
    payload = jwt.decode(
        token,
        key=signing_key.key,
        algorithms=signing_algos,
        audience=api_identifier,
        issuer=issuer
    )
    
    # 3. Scopeクレーム検証
    # Payloadからスコープを取得
    # 複数指定に対応するため' 'で分割
    # API定義とPayloadに一致があるかを確認するためsetに変換している
    payload_scope_set = set(payload['scope'].split(' '))
    api_scope_set = set(api_scope_list)
    and_scope_list = list(payload_scope_set & api_scope_set)
    # スコープ一致なし
    if len(and_scope_list) == 0:
        return None
    return payload

参考情報

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?