class OpenIdAuthorizer extends BasicAuthorizer {

    @Override
    public boolean login(String token, String password) throws AuthException {
        if (password != null && !password.isEmpty()) {
            logger.error("JWT Login failed as a non-empty Password was given username (token): {}, password: {}", token, password);
            return false;
        }
        if (token == null || token.isEmpty()) {
            logger.error("JWT Login failed as a Username (token) was empty!");
            return false;
        }
        //This line will throw an exception if it is not a signed JWS (as expected)
        Claims claims;
        try {
            claims = validateToken(token);
        } catch (JwtException e) {
            logger.error("Unable to login the user wit jwt {}", password, e);
            return false;
        }
        logger.debug("JWT was validated successfully!");
        logger.debug("ID: {}", claims.getId());
        logger.debug("Subject: {}", claims.getSubject());
        logger.debug("Issuer: {}", claims.getIssuer());
        logger.debug("Expiration: {}", claims.getExpiration());
        // Create User if not exists
        String iotdbUsername = getUsername(claims);
        if (!super.listAllUsers().contains(iotdbUsername)) {
            logger.info("User {} logs in for first time, storing it locally!", iotdbUsername);
            // We give the user a random password so that no one could hijack them via local login
            super.createUser(iotdbUsername, UUID.randomUUID().toString());
        }
        // Always store claims and user
        this.loggedClaims.put(getUsername(claims), claims);
        return true;
    }

    public  OpenIdAuthorizer();
      OpenIdAuthorizer(JSONObject jwk);
      OpenIdAuthorizer(String providerUrl);

}