Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork576
feat(etsy): Add Etsy Web Provider#2398
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:dev
Are you sure you want to change the base?
Uh oh!
There was an error while loading.Please reload this page.
Conversation
kevinchalet commentedNov 25, 2025
Hey, Thanks for your PR!
Only a single userinfo call made by OpenIddict is supported: any additional API call is the responsibility of the developers, who can implement that in their authorization controller (e.g to persist any additional information in the authentication cookie before it is returned).
It must be generated randomly. Make sure it respects the same exact format as other providers (no braces, all lowercase, etc.).
When you have multiple nodes under
All the claims returned by the provider are returned by OpenIddict so you don't need to do anything special for that
We can't realistically list all the workarounds possible in the documentation (otherwise it would become unreadable 🤣). Luckily, most providers don't need to change that. What you've done looks good 👍🏻
That's fine: if the service doesn't currently support client authentication, the user will not have to call
If the URLs are exactly the same, then no, it's not necessary/useful. A single Hope I answered all your questions 😃 |
… to alphabetical order
… AccessToken and call getUsers instead of getMechore: Add Claims for name and Email
… is already added by default
…Endpoint for UserInfo, remove UserInfoEndpoint from settings as its now overriddenchore: Adjust Scopes Required state in Provider.xml
DevTKSS commentedNov 25, 2025
@kevinchalet I updated the OP above with Task bullet points, so you can see where are still open/unclear points 👍
thanks, worked 👍 possible a nice small information in docs would be good to add for future contributors? for example the current note could be considerable to be updated like this: Note When the provider is known to support Proof Key for Code Exchange (PKCE), a
Referring to your response:
|
DevTKSS commentedNov 25, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
trying out in e.g. the OpenIdDict.Sandbox.Console.Client I would see the Scopes not beeing generated while we do list them in the xml file as something that should be fixed if possible. I am not really sure for what they chould otherwhile be meant when not giving us the option to get them generated as const string or similar while registration of the Provider in the end 🤔 maybe you can tell? @kevinchalet Seems like something gets messed up with the Request 🤔 OpenIdDict.Sandbox.Console.Client![]() What doesn't fit:
Etsy Auth guide Reference for this: OpenIddict.Sandbox.AspNetCore.Client is failing toothis would be a valid approach using 5001 port from the login page at etsy authas they are internally redirecting, the important thing to notice is that the port is completely provided after the |
kevinchalet commentedNov 26, 2025
We don't generate constants for scopes (some services have an insane amount of scopes so it would be a lot of work to maintain that in the long term): the scopes nodes in the XML file are exclusively used for providers that either require at least one scope to be set (
The console app is a public client meant to be used on a desktop machine: as such, it requires using either HTTP or a custom URI scheme. If the service absolutely requires using HTTPS, use the web client app instead and use |
src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationHandlers.Userinfo.cs OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
src/OpenIddict.Client.WebIntegration/OpenIddictClientWebIntegrationProviders.xml OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
DevTKSS commentedNov 26, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@kevinchalet 🤔 I am a bit wondering now. I tryed using ![]() which does match the url I registred in the API I am calling. but, correct me if I am wrong, shouldn't this be the same url in both places? Or does this somehow redirect this internally? by the way, refering to your response:
okay, for localhost I could change this in the registration, but generally, if https scheme is not supported in a console Client, thenwhy is this set up like this? If it is known to not work like this? I am searching for the reason that I seem to miss 😅 🤔 ![]() so seems like this is coming from the And I think the response does not contain all expected contents 🤔 but expected would be anything like this as response from UserInfo {"user_id":1,"primary_email":"user@example.com","first_name":"string","last_name":"string","image_url_75x75":"string"}or as mentioned 2 Tokens if the output should show this. Could you please check whats wrong? Tryed as 2nd with the the response we are ending up here with is the code + state parameter to our but while the application did only ended up with the "Something went really wrong" error page, reading the console output, the auth flow was correctly looped through after this. just that the UI is getting stuck on the Error Page. seems like there is some Response redirecting to this wrong? ![]() |





Uh oh!
There was an error while loading.Please reload this page.
This PR should be adding Etsy as OAuth2 Web Provider
PR Requires help
Known Problems / open tasks / decisions
UserInfoEndpointin Etsy Provider:from
getMe, which would be commonly the url we are used to call for this task/users/mebut does not return regular User Information we might be expecting like a Name or emailshop_idParameter returned by this endpoint -> if we use this Endpoint we only return theuser_idand theshop_idwill be automatically returned somewhere/somehow 🤷switched to getUser, so if this doesn't get decided to get reverted, we dont care about
shop_idtogetUser Endpoint which returns those parameters but doesn't need additional Mapping in e.g.
MapNonStandardResponseParameters()required additional scope
email_rwhich isnot guaranteed to be granted by the consumer!Referring to the Endpoint description
json response parameters (Claims to be added?):
user_idprimary_emailfirst_namelast_nameimage_url_75x75Path Parameters:
user_id(Type:<int64>) - Please check out the TODO's inUserInfoand Handler Claims added for this. Not sure if this is now redundant and we can remove most of them fromUserInfoPartial Class 🤔Uri:
https://openapi.etsy.com/v3/application/users/{user_id}- Removed from xml file, now using OverrideUserInfoEndpointMaybe we need to add Etsy Provider to theOverrideUserInfoRetrieval List here too, please check for this 👍
Tip
The
user_idparameter canalso be extracted from theaccess_tokenorrefresh_tokenparameter after Authentication Code Exchange, not only by calling thegetMeEndpoint, which provides us the uniqueshop_idparameter used for other endpointsEtsy Docs provided Sample response after code exchange:
{"access_token":"12345678.O1zLuwveeKjpIqCQFfmR-PaMMpBmagH6DljRAkK9qt05OtRKiANJOyZlMx3WQ_o2FdComQGuoiAWy3dxyGI4Ke_76PR","token_type":"Bearer","expires_in":3600,"refresh_token":"12345678.JNGIJtvLmwfDMhlYoOJl8aLR1BWottyHC6yhNcET-eC7RogSR5e1GTIXGrgrelWZalvh3YvvyLfKYYqvymd-u37Sjtx"}ScopesAre not be generated inScopesSupportedCollection in the Configuration, not even the default ones (?)Other Points to check
How is the Provider Id meant to be generated? - gets linted, and GUID generator in VS2026 does not satisfy the requirements
CodeChallengeMethodisstated to be required in Configuration tag, but gets linted.Do we need to add etsy'sContent-Type: application/x-www-form-urlencoded; charset=utf-8 or
"application/json; charset=utf-8"toNormalizeContentTypeor is this already covered by default ? not sure whats the difference between Parameter and Payload 🤔Additional Information for Reviewer
Setting up Header + Authorization Header appropriately
Etsy does not make use of the
Shared Secretaka Client Secret, but the Registration provides one, the client is treatened as public client + requires interactive, no implicit or non-interactive flow is supported!Do the both App Registration kinds in Etsy require different Envirionments?
both are using same uri's
Etsy Auth does not support a Logout as such, but the generator seems to accepts a Logout Uri?

@kevinchalet could you please help me set this up correctly?