<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Topics tagged with pkce]]></title><description><![CDATA[A list of topics that have been tagged with pkce]]></description><link>https://fusionauth.io/community/forum/tags/pkce</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 21:09:03 GMT</lastBuildDate><atom:link href="https://fusionauth.io/community/forum/tags/pkce.rss" rel="self" type="application/rss+xml"/><pubDate>Invalid Date</pubDate><ttl>60</ttl><item><title><![CDATA[OpenID Connect doesn&#x27;t fallback to non-PKCE if provider doesn&#x27;t support it]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://fusionauth.io/community/forum/uid/2457">@yves</a> So I found this that may be of interest to you.</p>
<p dir="auto">For the Authorization Code Grant, if the clientAuthenticationPolicy value is Required, the client secret is required. If the value is NotRequired, the client secret is not required. If the value is NotRequiredWhenUsingPKCE and PKCE is used, the client secret is not required. <strong>If PKCE is not used, the client secret is required</strong>.</p>
<p dir="auto">What is your setting there?</p>
]]></description><link>https://fusionauth.io/community/forum/topic/2633/openid-connect-doesn-t-fallback-to-non-pkce-if-provider-doesn-t-support-it</link><guid isPermaLink="true">https://fusionauth.io/community/forum/topic/2633/openid-connect-doesn-t-fallback-to-non-pkce-if-provider-doesn-t-support-it</guid><dc:creator><![CDATA[mark.robustelli]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[&quot;Invalid Authorization Code&quot; while implementing the Authorization Code Flow with Proof Key for Code Exchange (PKCE)]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://fusionauth.io/community/forum/uid/20">@dan</a></p>
<p dir="auto">I actually got the issue resolved, I had the PKCE configured as "Not Required". After I changed that to "Required" the flow worked as expected.</p>
<p dir="auto">Thanks.</p>
]]></description><link>https://fusionauth.io/community/forum/topic/1515/invalid-authorization-code-while-implementing-the-authorization-code-flow-with-proof-key-for-code-exchange-pkce</link><guid isPermaLink="true">https://fusionauth.io/community/forum/topic/1515/invalid-authorization-code-while-implementing-the-authorization-code-flow-with-proof-key-for-code-exchange-pkce</guid><dc:creator><![CDATA[apeksha.barhanpur]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[405 when running client.exchangeOAuthCodeForAccessTokenUsingPKCE]]></title><description><![CDATA[<p dir="auto">For anybody having this issue, it turned out I had written my URL wrong: http://company.fusionauth.io for example instead of https://company.fusionauth.io. The redirect to https:// caused the error.</p>
]]></description><link>https://fusionauth.io/community/forum/topic/1081/405-when-running-client-exchangeoauthcodeforaccesstokenusingpkce</link><guid isPermaLink="true">https://fusionauth.io/community/forum/topic/1081/405-when-running-client-exchangeoauthcodeforaccesstokenusingpkce</guid><dc:creator><![CDATA[dan]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Security and PKCE]]></title><description><![CDATA[<p dir="auto">Hiya,</p>
<p dir="auto">PKCE is great and should be used if supported. This helps prevent authorization code replay attacks, as recommended here: <a href="https://tools.ietf.org/html/draft-ietf-oauth-security-topics-16#page-6" rel="nofollow ugc">https://tools.ietf.org/html/draft-ietf-oauth-security-topics-16#page-6</a></p>
<p dir="auto">Using a proxy and storing the access token on server side rather than javascript solves a different set of security concerns. Because access tokens are typically bearer tokens and are not sender constrained, anyone who gets them has access to whatever they grant access to.</p>
<p dir="auto">This means that if your javascript has access to the token, so does any other javascript running on your page. If you are comfortable with that (you've audited all the javascript in all the libraries, and their dependencies to ensure that there's no security issues) then storing the access token may be ok.</p>
<p dir="auto">Since that level of comfort with javascript libraries is not typical (do you know what is going on in the dependencies of your dependencies? many folks don't), we recommend one of two approaches:</p>

store the access token server side, and use the session to tie the client to the access token (what our blog posts typically do)
store the access token in a secure, httponly cookie, so that it is not accessible to javascript, but is sent to any APIs. That's more fully fleshed out here: <a href="https://fusionauth.io/learn/expert-advice/authentication/spa/oauth-authorization-code-grant-jwts-refresh-tokens-cookies/" rel="nofollow ugc">https://fusionauth.io/learn/expert-advice/authentication/spa/oauth-authorization-code-grant-jwts-refresh-tokens-cookies/</a>

<p dir="auto">Of course, you alone know your security posture and what you're comfortable with, but that's what we recommend.</p>
]]></description><link>https://fusionauth.io/community/forum/topic/504/security-and-pkce</link><guid isPermaLink="true">https://fusionauth.io/community/forum/topic/504/security-and-pkce</guid><dc:creator><![CDATA[dan]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[Prevent redirect after forgot password flow?]]></title><description><![CDATA[<p dir="auto">When the user arrives at the Forgot Password we capture all of the OAuth2 state, including PKCE parameters. When the user completes this flow, we replay all of this state, so the login will complete using PKCE.</p>
<p dir="auto">If you want the Forgot Password flow to complete without this step, you can either handle Forgot Password in your SPA, or when you redirect them to the FusionAuth Forgot Password page /password/forgot - do not provide client_id on the request. If client_id is not provided, we will assume this is not within the OAuth2 workflow and we will not attempt to log the user in at the end of the flow.  In this case, the user will end up on /password/complete.</p>
]]></description><link>https://fusionauth.io/community/forum/topic/366/prevent-redirect-after-forgot-password-flow</link><guid isPermaLink="true">https://fusionauth.io/community/forum/topic/366/prevent-redirect-after-forgot-password-flow</guid><dc:creator><![CDATA[dan]]></dc:creator><pubDate>Invalid Date</pubDate></item></channel></rss>