JWT 集不包含任何可用的密钥

Har*_*has 9 okta auth0 fastapi

在使用 fastapi 的 okta 应用程序设置 Auth0 身份验证时,我们收到以下错误,

jwt.exceptions.PyJWKSetError: The JWK Set did not contain any usable keys
Run Code Online (Sandbox Code Playgroud)

我们遵循以下链接中详细说明的指南来使用 auth0 实施快速 api 授权。

https://auth0.com/blog/build-and-secure-fastapi-server-with-auth0/

以下代码用于验证创建的令牌。给定的错误出现在验证函数的第一个 try 块中。

class VerifyToken():
"""Does all the token verification using PyJWT"""
def __init__(self, token):
    self.token = token
    self.config = set_up()
    print(self.config)
    # This gets the JWKS from a given URL and does processing so you can
    # use any of the keys available
    jwks_url = f'https://{self.config["DOMAIN"]}/.well-known/jwks.json'
    self.jwks_client = jwt.PyJWKClient(jwks_url)
def verify(self):
    # This gets the 'kid' from the passed token
    try:
        self.signing_key = self.jwks_client.get_signing_key_from_jwt(
            self.token
        ).key
    except jwt.exceptions.PyJWKClientError as error:
        print(error)
        return {"status": "error", "msg": error.__str__()}
    except jwt.exceptions.DecodeError as error:
        return {"status": "error", "msg": error.__str__()}
    try:
        print(self.config)
        payload = jwt.decode(
            self.token,
            self.signing_key,
            algorithms=self.config["ALGORITHMS"],
            audience=self.config["API_AUDIENCE"],
            issuer=self.config["ISSUER"],
            options={"verify_exp": False}
        )
    except Exception as e:
        return {"status": "error", "message": str(e)}
    return payload
Run Code Online (Sandbox Code Playgroud)

Har*_*has 15

如果出现此错误,请检查您已安装的 pyjwt 库。它不适用于 python 中的默认 pyjwt 库。必须通过以下方式安装 pyjwt[crypto],

pip install pyjwt[crypto]
Run Code Online (Sandbox Code Playgroud)

  • 我希望 jwt.PyJWKClient 可以抛出一个更友好的异常,并显示需要加密的消息。 (3认同)