Skip to content

Commit de77149

Browse files
jals1212atinux
andauthored
fix: missing code_challenge and state mismatch (#465)
Co-authored-by: Sébastien Chopin <seb@nuxt.com> Co-authored-by: Sébastien Chopin <atinux@gmail.com>
1 parent 3a0a3e7 commit de77149

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

src/runtime/server/lib/oauth/azureb2c.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ export function defineOAuthAzureB2CEventHandler({ config, onSuccess, onError }:
105105
return handleInvalidState(event, 'azureb2c', onError)
106106
}
107107

108-
console.info('code verifier', verifier.code_verifier)
109108
const tokens = await requestAccessToken(tokenURL, {
110109
body: {
111110
grant_type: 'authorization_code',

src/runtime/server/lib/utils.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -182,26 +182,29 @@ function getRandomBytes(size: number = 32) {
182182
}
183183

184184
export async function handlePkceVerifier(event: H3Event) {
185-
let verifier = getCookie(event, 'nuxt-auth-pkce')
186-
if (verifier) {
187-
deleteCookie(event, 'nuxt-auth-pkce')
188-
return { code_verifier: verifier }
189-
}
185+
const query = getQuery<{ code?: string }>(event)
190186

191187
// Create new verifier
192-
verifier = encodeBase64Url(getRandomBytes())
193-
setCookie(event, 'nuxt-auth-pkce', verifier)
194-
195-
// Get pkce
196-
const encodedPkce = new TextEncoder().encode(verifier)
197-
const pkceHash = await subtle.digest('SHA-256', encodedPkce)
198-
const pkce = encodeBase64Url(new Uint8Array(pkceHash))
199-
200-
return {
201-
code_verifier: verifier,
202-
code_challenge: pkce,
203-
code_challenge_method: 'S256',
188+
if (!query.code) {
189+
const verifier = encodeBase64Url(getRandomBytes())
190+
setCookie(event, 'nuxt-auth-pkce', verifier)
191+
192+
// Get pkce
193+
const encodedPkce = new TextEncoder().encode(verifier)
194+
const pkceHash = await subtle.digest('SHA-256', encodedPkce)
195+
const pkce = encodeBase64Url(new Uint8Array(pkceHash))
196+
197+
return {
198+
code_verifier: verifier,
199+
code_challenge: pkce,
200+
code_challenge_method: 'S256',
201+
}
204202
}
203+
// If the verifier is in the cookie, get it from the cookie and delete the cookie
204+
const verifier = getCookie(event, 'nuxt-auth-pkce')
205+
deleteCookie(event, 'nuxt-auth-pkce')
206+
207+
return { code_verifier: verifier }
205208
}
206209

207210
export async function handleState(event: H3Event) {

0 commit comments

Comments
 (0)