#nish_connect-oauth
1 messages ยท Page 1 of 1 (latest)
๐ Welcome to your new thread!
โฒ๏ธ We'll be here soon! Typically we respond in a few minutes, but sometimes we might take a bit longer if the server is busy or if you have a particularly tricky question.
โฑ๏ธ We close idle threads, which makes them read-only. Once a thread is closed it won't be reopened, but you can always start a new thread if you have another question.
๐ This thread will always be available, even after it's closed. You can find it again using Discord's search, or you can save this link: https://discord.com/channels/841573134531821608/1281332079925137409
๐ Have more to share? Add more details, code, screenshots, videos, etc. below.
Hi there ๐ can you tell me a bit more about your Connect flow, are you using OAuth to onboard your Connected Accounts?
I am the developer. I am using OAuth.
Can you share the ID of the Connected Account that you're running into problems with?
acct_14c1gUHMuhruQE5z
Thank you! I'll take a look at that. While I do, can you also share your Platform account ID?
Do you know where I'd find that?
I believe you can see it on this page in your Stripe dashboard:
https://dashboard.stripe.com/settings/account
nish_connect-oauth
acct_2RhHuSTX2h7aLvSWN8Yv
Hm, I was thinking that either the account's connection had been revoked, either intentionally via this process:
https://docs.stripe.com/connect/oauth-reference#post-deauthorize
or unintentionally by consuming the authorization code more than once:
https://docs.stripe.com/connect/oauth-reference#post-deauthorize:~:text=Per OAuth v2%2C this endpoint isnโt idempotent. Consuming an authorization code more than once revokes the account connection
But I think it looks the account is connected still. Do you know when you first started seeing this error for this account? And are the failing requests being made in livemode, or are they testmode requests?
Test mode. I am also seeing the account as connected.
I think the user first connected 3 months ago, and then tried it again today.
However they have tried re-connecting it since so that should fix any key-related issues.
Ah, so it looks to me like the account is only connected to your Platform in livemode, so testmode requests wouldn't be expected to succeed. Are you able to connect the account to your Platform using your testmode Client ID in your OAuth flow?
Hm ... When using the OAUth flow we always connect in live mode, but we also fetch the test keys. This allows users to swith between test and live modes without needing to use the connect flow again.
Can you elaborate on that a bit? When you use our OAuth flow, you specify the Client ID being used in the URL that you generate to send your users to, and that Client ID is specific to either live or testmode for your Platform (you have separate IDs for each mode).
https://docs.stripe.com/connect/oauth-reference#redirect-uri
Yes, so we always initiate the flow in live mode and then get the authorization_code in live mode. Then we use our test client_id with the grant_type refresh_token to also get the test keys (by using the refresh_token from the previous authorization_code livemode request)
Oh, interesting, I hadn't thought of trying that. And that's working for your other accounts?
Yep, without an issue for about 8 years now!
If it helps, the precise error message is: Expired API Key provided. Platform access may have been revoked.
That's why it sounds like the connection between the accounts was deauthorized. I'll look around to see if there are other things that are known to lead to that error.
Ok. I'll wait. Thanks.
Hm, everything that I'm finding indicates that error is thrown when the connection is revoked. Are you still able to fetch new testmode keys for the account?
Is there a way my customer can check if the access was revoked? Ideally I should also see this in my connect dashboard, but it doesn't say so.
Yes, I believe I am able to fetch keys. The customer is able to complete the oauth flow without issues, meaning we get all the keys.
Yup, totally agree! I'm juggling a couple threads at the moment, but am trying to double check whether this is surfaced in the dashboard for the Connected Account still.
Ok, thanks!
Hm, as far as I can tell the application is still connected. Is it possible you got another testmode key after the one you're trying to use, which would have invalidated the previous one? If you fetch a new testmode key for this account, are you able to make requests with that new key?
I had my client remove App Access and then re-connect - same error. I now have a new testmode key - but the error remains. I can see the last few digits of the key in the error message.
Here is something - even when I switch to live mode, the error persists. So it's not just a live / test mode issue.
Expired API Key provided: pk_live_*********************************************************************************************N4BI7f. Platform access may have been revoked.
Oh, now it doesn't look like you're connected to the Account anymore.
@tiny sapphire 99% of the time it's a bug in your code where you mistakenly "reuse" the authorization code ac_12345 by mistake which forces the disconnection. It's exactly what is happening now
Hm ... I am guessing I won't see the request consume the authorization_code in my developer logs? If the authorization_code is used more than once - wouldn't it throw an error?
Correct you won't see it. And yes it does throw an error. My guess is you aren't tracking this properly or someone reloads the page for example. But I can tell you this is 100% the issue
And to confirm - this is the request where we exchange the authorization_code for the tokens, using grant_type "authorization_code". Because after this call we also use grant_type "refresh_token".
yes that first one is the issue
Ok. Odd that it only happens for this customer. Maybe the callback URL gets called more than once owing to a strange cocktail of variables. I'll add some logging to track each call.
If that fails can I come back to this thread, whenever that is?
The thread will be closed, they are ephemeral (but the information will still be here). You would start a new question/thread if you had follow up questions!