getJwtPayload static method

Future<JwtPayload> getJwtPayload(
  1. String idToken
)

Implementation

static Future<JwtPayload> getJwtPayload(String idToken) async {
  final lIdToken =
      idToken.startsWith('Bearer ') ? idToken.substring(7) : idToken;
  final b64Header = lIdToken.split('.')[0];
  var jsonHeader = decodeB64Json(b64Header);
  final map = jsonDecode(jsonHeader);
  final keyId = map['kid'];

  final ks = await _getKeyStore(keyId);
  final jwt = await JsonWebToken.decodeAndVerify(lIdToken, ks);
  if (!(jwt.isVerified ?? false)) {
    throw InvalidSignatureException();
  }

  final claims = jwt.claims;

  final payload = JwtPayload(
    audience: claims.audience?.first ?? '',
    expires: claims.expiry ?? DateTime.now(),
    issuer: claims.issuer?.toString() ?? '',
    name: claims.getTyped('name') ?? '',
    notBefore:
        claims.notBefore ?? DateTime.now().subtract(Duration(seconds: 1)),
    subject: claims.getTyped('sub'),
    email: claims.getTyped('email'),
    emailVerified: claims.getTyped('email_verified'),
    tenantId: claims.getTyped('tenantId') ?? '',
    tid: claims.getTyped('tid') ?? '',
    permissions: claims.getTypedList<String>('scp') ?? const <String>[],
    isAdministrator: claims.getTyped('adm') ?? false,
    isVerified: true,
  );
  return payload;
}