Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Add PKCE support (for v5-dev Typescript) #659

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
jcdogo wants to merge 1 commit into oauthjs:v5-dev
base: v5-dev
Choose a base branch
Loading
from dogomedia:features/pkce-v5-dev

Conversation

@jcdogo
Copy link

@jcdogo jcdogo commented Oct 8, 2020

This pull implements PKCE support (RFC7636). It is originally based on pull #452, but has been cleaned up a bit. Changes should be almost identical to pull #658, but cleaned up for Typescript.

Summary of changes:

  1. PKCE is completely optional. If the PKCE-related parameters (code_challenge, code_challenge_method, and code_verifier) are not passed to the server, the server behaves exactly the same as before. PKCE mode is enabled only when:
  • code_challenge (and optionally code_challenge_method) parameters are included during authorization code grant.
  • code_verifier parameter is included during token grant. When code_verifier parameter is included, client_secret is ignored since we are using PKCE for authentication.
  1. This change introduces 2 new optional fields (codeChallenge and codeChallengeMethod) to the authorization code model. Changes are required to Model#saveAuthorizationCode and Model#getAuthorizationCode to persist and retrieve these 2 new fields if they are present.
  2. 100% backwards compatible with existing implementations. If existing servers do not update the Model#saveAuthorizationCode and Model#getAuthorizationCode methods, they will continue to work just as they did before the change.
  3. Added lots of tests and updated the documentation.

Example of my changes to saveAuthorizationCode for a MongoDB model (in Typescript):

 const mongoOAuthCodeGrant = {
 code: code.authorizationCode,
 expires_at: code.expiresAt,
 redirect_uri: code.redirectUri,
 scope: code.scope,
 client_id: client.id,
 user_id: userId,
 oauth_client_id: mongoOAuthClient._id,
 };
 if (code.codeChallenge) {
 mongoOAuthCodeGrant.code_challenge = code.codeChallenge;
 if (code.codeChallengeMethod) {
 mongoOAuthCodeGrant.code_challenge_method = code.codeChallengeMethod;
 }
 }
 const saveResult = await db
 .collection(oauthAuthCodeGrantsCollectionName)
 .insertOne(mongoOAuthCodeGrant);

Example of my changes to getAuthorizationCode for a MongoDB model (in Typescript)

 const mongoAuthCodeGrant = await db
 .collection(oauthAuthCodeGrantsCollectionName)
 .findOne({code: authorizationCode});
 const user = await getUserById(mongoAuthCodeGrant.user_id);
 const client = await getClientById(mongoAuthCodeGrant.client_id);
 const grant: OAuthCodeGrant = {
 authorizationCode: mongoAuthCodeGrant.code,
 expiresAt: mongoAuthCodeGrant.expires_at,
 redirectUri: mongoAuthCodeGrant.redirect_uri,
 scope: mongoAuthCodeGrant.scope,
 client: client,
 user: user,
 };
 if (mongoAuthCodeGrant.code_challenge) {
 grant.codeChallenge = mongoAuthCodeGrant.code_challenge;
 if (mongoAuthCodeGrant.code_challenge_method) {
 grant.codeChallengeMethod = mongoAuthCodeGrant.code_challenge_method;
 }
 }

Legion2, geoffoliver, and RaresAil reacted with thumbs up emoji
Copy link
Author

jcdogo commented Oct 8, 2020

This partially addresses issue #637 by implementing PKCE.

Copy link

ghost commented Feb 25, 2021

Is this ever going to get merged? It would be amazing to have this functionality.

miccoh1994 and murraybauer reacted with thumbs up emoji

Copy link

You guys may want to check out this repo https://github.com/jasonraimondi/typescript-oauth2-server

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /