我有一个使用Oauth保护的API,我要在过渡环境和生产环境中公开它。为了获得适当的安全性,过渡环境和生产环境中API的 * 受众 * 是否应该不同?如果这两个环境中的受众相同,那么这是否允许使用单个访问令牌来访问生产环境和过渡环境中的API?谢谢。
lymnna711#
issuer声明对于部署管道的每个阶段都应该不同。audience声明通常是表示组件的逻辑名称,并且在所有环境中可以相同。
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禁止响应。
products
orders
1条答案
按热度按时间lymnna711#
issuer
声明对于部署管道的每个阶段都应该不同。audience
声明通常是表示组件的逻辑名称,并且在所有环境中可以相同。发给客户的代币
访问令牌可能包含以下内置声明:
ID令牌可能包含以下内容:
验证API中的JWT
典型代码如下所示,应验证颁发者和访问者。这确保每个环境拒绝来自其他环境的令牌,并在颁发者或访问者检查失败时返回401响应。
多个API
共享受众有时会在同一所有者的多个API之间使用。如果您正在开发调用
products
API的orders
API,则两者的受众可以相同。这使JWT能够在API之间转发,以便两者都接收可验证的用户身份。然后每个API都应该验证JWT,并检查令牌是否具有API从JWT有效负载中要求的作用域。如果不是这种情况,例如产品API没有接收到它所要求的作用域,它将返回403禁止响应。