过渡环境和生产环境中的Oauth受众是否应该不同

vq8itlhq  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(149)

我有一个使用Oauth保护的API,我要在过渡环境和生产环境中公开它。为了获得适当的安全性,过渡环境和生产环境中API的 * 受众 * 是否应该不同?
如果这两个环境中的受众相同,那么这是否允许使用单个访问令牌来访问生产环境和过渡环境中的API?
谢谢。

lymnna71

lymnna711#

issuer声明对于部署管道的每个阶段都应该不同。audience声明通常是表示组件的逻辑名称,并且在所有环境中可以相同。

发给客户的代币

访问令牌可能包含以下内置声明:

ID令牌可能包含以下内容:

典型代码如下所示,应验证颁发者和访问者。这确保每个环境拒绝来自其他环境的令牌,并在颁发者或访问者检查失败时返回401响应。

const jwksEndpoint = 'https://login.example.com/.well-known/jwks';
const remoteJWKSet = createRemoteJWKSet(new URL(jwksEndpoint));

function validateJwtAccessToken(accessToken) {

    const options = {
        algorithms: ['RS256'],
        issuer: 'https://login-staging.example.com',
        audience: 'api.example.com',
    };
    const result = await jwtVerify(accessToken, remoteJWKSet, options);
    const claims = result.payload;
    return claims;
}

多个API

共享受众有时会在同一所有者的多个API之间使用。如果您正在开发调用products API的orders API,则两者的受众可以相同。这使JWT能够在API之间转发,以便两者都接收可验证的用户身份。
然后每个API都应该验证JWT,并检查令牌是否具有API从JWT有效负载中要求的作用域。如果不是这种情况,例如产品API没有接收到它所要求的作用域,它将返回403禁止响应。

相关问题