如何验证和使用访问令牌来访问 API 资源?

How to verify and use access token to access an API resource?

嘿,我正在使用 open id connect 授权代码流来验证我的用户。身份验证成功后,我会收到访问令牌和 ID 令牌。现在,一旦我的用户通过 OIDC 提供商访问权限进行身份验证并授予 ID 令牌,我就会感到困惑,所以现在要访问我的应用程序的 APIs,我将在每个 API 请求中将访问令牌作为承载令牌传递,并且然后我的应用程序将如何验证访问令牌仍然有效并且可以访问所请求的 API?我是否需要再次向 OIDC 提供商发出请求以验证访问令牌的有效性?如果是,那么对于每个 API 我必须向 OIDC 提供商发送请求以验证我的访问令牌并检查用户是否有权访问此 API 的开销不是开销吗?请建议我验证用户身份的最佳方法 API 访问成本不高

API 使用安全库对每个请求验证 JWT 访问令牌。其中第一个将从授权服务器的 JWKS 端点下载令牌签名 public 密钥 - 然后库应该为您缓存这些密钥。

这里是some example code in Node.js, and the same type of code can be written in any programming language. You will need to inspect your JWT access token, eg in OAuth Tools,查看它包含的颁发者和受众声明,然后配置它们。

const accessToken = readAccessTokenFromAuthorizationHeader();
            
const remoteJwkSet = createRemoteJWKSet(new URL(this._configuration.jwksEndpoint));
const options = {
    algorithms: ['RS256'],
    issuer: 'myissuer',
    audience: 'myaudience',
};

// Verify the JWT's digital signature
const result = await jwtVerify(accessToken, remoteJwkSet, options);

// On success, you can then use claims to enforce authorization
const claims = result.payload;