We recommend all applications to use the authorization code flow if possible as it provides a better end-user experience and allows for a longer session duration because of the refresh token, but if no access to a back-end server is available, the implicit flow can instead be used. Our implementation follows the 'Implicit Grant' specification in The official OAuth 2.0 Authorization Framework.
Below is a guide to get started using this authorization flow.
Your OpenAPI Application
When an application is created for you on OpenAPI, you will receive the following application details:
| Name | Description | Example | 
|---|---|---|
| AppUrl | A URL uniquely representing your app. | http://localhost/mytestapp | 
| AuthenticationUrl | The URL of the Saxo Bank authentication & authorization server. | https://sim.logonvalidation.net/ | 
| AppKey | The Application key identifying your application. | 1234-5678-9101 | 
| AppSecret | The Application "secret" identifying your application. | abcdefghijklmn | 
| OpenApiBaseUrl | Base URL for calling OpenAPI REST endpoints. | https://gateway.saxobank.com/sim/openapi/ | 
These can be mapped to the necessary OAuth parameters:
| OAuth Parameter | Saxo App Value | Example | 
|---|---|---|
| client_id | AppKey | 1234-5678-9101 | 
| redirect_uri | AppUrl | http://localhost/mytestapp | 
| authorization_url | AuthenticationUrl + '/authorize' | https://sim.logonvalidation.net/authorize | 
| Below parameters are determined by the developer: | ||
| response_type | Must always be set to 'token' | token | 
| state | Randomly generated string used by the client to maintain state between the request and callback. | y90dsygas98dygoidsahf8sa | 
| scope | Not used | |
Authorization Request
To initiate the authentication flow, redirect the client to the /authorize with the required parameters in the query string. Make sure to set the content-type to 'application/x-www-form-urlencoded'.
Example:
GET /authorize?response_type=token
        &client_id=1234-5678-9101
        &state=y90dsygas98dygoidsahf8sa
        &redirect_uri=http%3A%2F%2Flocalhost%2Fmytestapp
Once the user is logged in, he will be redirected back to the provided redirect_url with an access token as a hash fragment.
HTTP/1.1 302 Found Location: http://localhost/mytestapp#access_token=eyJhbG[...]deICk4pA&token_type=bearer&expires_in=1199&state=y90dsygas98dygoidsahf8sa
In case of an error during the authorization process, the error will similarly be returned as a hash fragment
HTTP/1.1 302 Found Location: http://localhost/mytestapp#error=access_denied&state=y90dsygas98dygoidsahf8sa
See the code sample in JavaScript on the Implicit Flow.