oauth2.0 使用Okta验证从多个客户端ID生成的访问令牌

qrjkbowd  于 2023-01-29  发布在  其他
关注(0)|答案(1)|浏览(278)

我有两个应用程序使用相同的后端。两个前端应用程序使用不同的客户端ID。什么是最好的方法去验证访问令牌为两个前端应用程序。下面是我有什么的基本结构。

const OktaJwtVerifier = require('@okta/jwt-verifier');

const oktaJwtVerifier = new OktaJwtVerifier({
  issuer: process.env.OKTA_ISSUER,
  clientId: process.env.OKTA_CLIENT_ID

});

const oktaToken = await oktaJwtVerifier.verifyAccessToken(accessTokenString,[
    process.env.OKTA_CLIENT_ID,
]);

是否有方法发送issuerclientId的数组?目的是验证来自两个应用APP X和APP Y的访问令牌,即clientIdXclientIdY

hs1rzwqc

hs1rzwqc1#

你不需要验证客户端id,因为它是用来获取令牌的,Okta的GitHub repoREADME.md提供了一个访问令牌需要验证的声明/条件的概念(https://github.com/okta/okta-jwt-verifier-js#access-tokens),所以请检查。
下面是验证库中的一个代码段,它显示您不需要client_id来进行访问令牌验证

async verifyAccessToken(accessTokenString, expectedAudience) {
    // njwt verifies expiration and signature.
    // We require RS256 in the base verifier.
    // Remaining to verify:
    // - audience claim
    // - issuer claim
    // - any custom claims passed in

    const jwt = await this.verifyAsPromise(accessTokenString);
    verifyAudience(expectedAudience, jwt.claims.aud);
    verifyIssuer(this.issuer, jwt.claims.iss);
    verifyAssertedClaims(this, jwt.claims);

    return jwt;
  }

一般来说,客户端id是什么并不重要,通过它可以获得令牌,重要的是令牌的内容:

  • 是给谁的
  • 谁发行的
  • 其到期时间
  • 示波器
  • 海关索赔

如果您关心客户端ID,可以通过引入对其访问策略/规则的约束,在authZ服务器级别上消除它。

相关问题