{"record":{"id":"c20f88c5657b2cd7","repo":"apache/pulsar","slug":"invalid-token-c20f88","errorCode":"INVALID_TOKEN","errorMessage":"Unknown user or invalid password","messagePattern":"Unknown user or invalid password","errorType":"exception","errorClass":"AuthenticationException","httpStatus":null,"severity":"error","filePath":"pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderBasic.java","lineNumber":146,"sourceCode":"        String userId = authParams.getUserId();\n        String password = authParams.getPassword();\n        String msg = \"Unknown user or invalid password\";\n        ErrorCode errorCode = ErrorCode.UNKNOWN;\n        try {\n            if (users.get(userId) == null) {\n                errorCode = ErrorCode.INVALID_AUTH_DATA;\n                throw new AuthenticationException(msg);\n            }\n\n            String encryptedPassword = users.get(userId);\n\n            // For md5 algorithm\n            if ((users.get(userId).startsWith(\"$apr1\"))) {\n                List<String> splitEncryptedPassword = Arrays.asList(encryptedPassword.split(\"\\\\$\"));\n                if (splitEncryptedPassword.size() != 4 || !encryptedPassword\n                        .equals(Md5Crypt.apr1Crypt(password.getBytes(), splitEncryptedPassword.get(2)))) {\n                    errorCode = ErrorCode.INVALID_TOKEN;\n                    throw new AuthenticationException(msg);\n                }\n                // For crypt algorithm\n            } else if (!encryptedPassword.equals(Crypt.crypt(password.getBytes(), encryptedPassword.substring(0, 2)))) {\n                errorCode = ErrorCode.INVALID_TOKEN;\n                throw new AuthenticationException(msg);\n            }\n        } catch (AuthenticationException exception) {\n            incrementFailureMetric(errorCode);\n            throw exception;\n        }\n        authenticationMetrics.recordSuccess();\n        return userId;\n    }\n\n    private class AuthParams {\n        private String userId;\n        private String password;\n","sourceCodeStart":128,"sourceCodeEnd":164,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderBasic.java#L128-L164","documentation":"HTTP Basic auth rejection in AuthenticationProviderBasic.authenticate: the supplied user id is absent from the configured user map or its password does not match the stored hash (apr1-md5, bcrypt, or crypt variants); the user credential pair is the faulty input.","triggerScenarios":"Thrown at pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderBasic.java:146 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Correct the password in the client credentials","Regenerate the stored password hash if the encoding scheme ($apr1/bcrypt) mismatched"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"820761864ed8e2a7d2e52dd9763ad2ae117c1395","analyzedAt":"2026-09-06T00:14:20.138Z","contentChangedAt":"2026-09-06T00:14:20.138Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}