I have the following use case:
- I want to write a desktop application that makes use of a third-party API (e.g. Dropbox)
- This API requires an
access_tokento be sent to the server with each request.
- This token gets generated on behalf of the user and my application using an
OAuth2authentication flow, which the user performs on my website.
Now, normally I would pass the generated
access_token to the desktop application, where it can be used to make calls to the API. However, since the
access_token is stored on the user's computer, he would be able to extract and misuse it for purposes not intended by the application (e.g. exceeding the API rate limit or performing malicious requests).
To resolve this, I could of course tunnel all the API traffic through my own server backend and thus avoid providing the user with the
access_token. However, this would create large additional cost and would be a security risk for the client since his data would pass through an additional third-party service before going to the API server.
Is there any other way to keep the client from being able to retrieve the
access_token, while still allowing him to use it in order to make requests to the API server?
I read about TCP connection passing, which would allow me to create a connection to the API server on my backend using the access token and then hand over that connection to the client, but this technique seems rather experimental and is probably not production-ready.
Another way would be to use asymmetric cryptography to somehow encrypt the
access_token together with the URL on the backend server and let the client transfer this pre-encrypted data to the API server, but again I have no idea how to implement this using SSL.
I have thought about the problem and I think I have a solution, which would require a new API endpoint though and thus would not solve the initial problem: