Securing Mobile APIs using the OAuth2 Authorization Code Grant with PKCE
For mobile applications (on smartphones/tablets) a typical use case is that you let a user log in to your service, or create some kind of unique identifier for the user's device, which is considered the identity of the user, and that you then allow access only in the context of this user to your backend API.
In order to prevent fraud or excessive usage of your API, it's also typical to apply rate limiting by number of calls per authorized user and application.
You can now leverage the "local" authentication method of wicked to store your mobile users email addresses and passwords. Wicked can act as a full featured identity provider for your mobile backend, i.e. be a full mobile backend, including authentication and authorization.
For development time, the following workflow is typical:
myapp://
are also allowed)For the Authorization Code Grant to work with public clients (a client which is not running on a server backend), wicked.haufe.io requires the PKCE extension to be implemented. Any deployed portal itself contains more information on the details on how to implement this, see e.g. the help pages of the wicked Demo portal.
At runtime, the authentication and authorization of the API usage for the end user inside the mobile app will work as follows. When the end user opens the application for the first time, this happens:
myapp://hello/world?code=abcdefabcdefabcdef
.
All requests which the application now issues towards the API will be enriched with (a) the client identity, and (b) the end user's identity, passed on as headers.
Wicked packs brings all the necessary components to implement this out of the box, including the PKCE extension:
X-Authenticated-UserId
),
which application is calling the API on behalf of the user.
In case you implement using node.js, you can also leverage the wicked SDK to have even more influence on the user and registration management. Read up on the wicked SDK here:
As mentioned, wicked supports the PKCE extension of the Authorization Code Grant (see RFC 7636) and OAuth2 for native apps (see RFC 8252).
© 2016-2018 Haufe-Lexware GmbH & Co. KG, www.haufe-lexware.com, www.haufe.de, www.lexware.de, www.haufe-akademie.de