Let's assume that we've implemented a RESTful API providing financial/banking services and want to provide it to an in-house development team to implement the native mobile client-app.
In that sense the app and therefore the API will be public and reachable, so the WHAT gets access to it, needs to be authorized in every possible way.
The first solution that comes to mind is to provide a client_id and a client_secret and let the developers sign every request with the use of an Authorization http header:
Authorization: APP client_id:base64(HMAC-SHA256(content, client_secret))
As long as the server "knows" the client's secret, authorization of API usage will run smoothly.
What I do not like about this:
- every app instance out there has the same client_secret
- the client_secret is irrevocable
- it can be easily exposed through the app's source code even being obfuscated
- all in all, possibility of getting requests from unknown sources
On the other hand I do not want to mess with user experience, with redirects and extra login requests like OAuth and such.
What other authorization techniques are there for this kind of apps? Which path for authorization do famous fintech/banking companies follow?