node-oauth2-server icon indicating copy to clipboard operation
node-oauth2-server copied to clipboard

Client Credentials Grant

Open lemagicien00 opened this issue 3 years ago • 0 comments

When request a token by client_credential grant lib call getUserFromClient function.

As explained in the documentation here: https://oauth2-server.readthedocs.io/en/latest/model/spec.html#getuserfromclient-client-callback

"This model function is required if the client_credentials grant is used."

But precisely, during a grant of this type, there is no link between client and a specific user. See: https://oauth.net/2/grant-types/client-credentials/

"The Client Credentials grant type is used by clients to obtain an access token outside of the context of a user."

If in function getUserFromClient if we do not return a user (mean user = undefined), the lib return an error like { "error": "invalid_grant", "error_description": "Invalid grant: user credentials are invalid" } Beceause of : ClientCredentialsGrantType.prototype.getUserFromClient = function(client) { return promisify(this.model.getUserFromClient, 1).call(this.model, client) .then(function(user) { if (!user) { throw new InvalidGrantError('Invalid grant: user credentials are invalid'); } return user; }); };

The fact of not having a user associated with a client does not imply that the credentials are invalid. And, in documentation Return value of getUserFromClient, it is said that "An Object representing the user, or a falsy value if the client does not have an associated user. "

And if we return an empty user (mean user = { } for exemple), there is an error like { "error": "invalid_argument", "error_description": "Missing parameter: user" }

I suspect it's beceause in token record user field is not present.

The response come from TokenModel function in token-model.js file, there is the following test if (!data.user) { throw new InvalidArgumentError('Missing parameter: user'); }

I don't understand the logic, why user is required in TokenModel? According to the OAuth2.0 specification we should not need a link between client and user

lemagicien00 avatar Feb 04 '22 17:02 lemagicien00