Authentication
Shopfront uses OAuth 2.0 to authenticate applications. If you're not familiar with it we would highly suggest checking it out and understanding the standard and framework.
Getting Started
Before you begin developing your integration, you'll need to register it as an
application by creating an account.
Once you've created your application, it will be assigned a random client_id and
client_secret. Your client_secret should NOT be shared or committed to
source.
If your
client_secretis found to have been exposed to the internet, your application will be instantly revoked from all Vendors and all of your applications will be prevented from being authorised until Shopfront is satisfied you have secured your application.
Authorization Flow
In order to ensure secure authentication for Vendors and their users, we use Bearer Tokens to control access to resources.
In order to get an access token for your application you must complete the following:
Initial Authorization
In order for the user to authenticate your application you must direct them to one of the following addresses:
https://[vendor_subdomain].onshopfront.com/oauth/authorize(preferred)https://onshopfront.com/oauth/authorize
Both address provide the same functionality to the API, however it is more convenient for users to authenticate with their Vendor already specified.
When redirecting, you're required to pass the following as GET parameters
client_id: Theclient_idissued when you created your application,redirect_uri: The URL to redirect back to (it must match the URL you provided when setting up the application),response_type: This must equalcode,scope: A space separated list of scopes.
The following GET parameters are optional (but are recommended)
state: A string passed back to the application once authorization is completed (this is useful for assisting with the prevention of CSRF attacks).
An example URL looks like the following:
https://example.onshopfront.com/oauth/authorize?client_id=12345&redirect_uri=https%3A%2F%2Fexample.com%2Fredirect&response_type=code&scope=see_products%20create_products&state=ABC
Authorization Result
Following the redirect the user then selects to authenticate the application or not.
If the user declines the integration, they are redirected back to the redirect_uri
provided with the following GET parameters:
error: The error that occurred (user declined),state: The state provided originally if specified.
If the user approves the integration, they are also redirect back to the
redirect_uri provided but with the following GET parameters:
code: A temporary code used to retrieve an access token,state: The state provided originally if specified.
We are aware of an issue with some PHP configurations that have the
subhosin patchnot being able to read thecodeparameter as it sometimes exceeds the default 512 character limit for a URL. You can fix this by either: - Increasing the limit by addingsubhosin.get.max_value_length = [limit]where[limit]is a value of your choosing, - Manually parsing the URL by using$_SERVER['REQUEST_URI'].
Getting an Access Token
Once authorization has been completed successfully, you will be able to request
an access token for your application. To do this you must send a POST request
to https://onshopfront.com/oauth/token with the following fields in a JSON body:
client_id: Theclient_idissued when you created your application,client_secret: Theclient_secretissued when you created your application,code: The temporary code provided from a successful authorization,redirect_uri: The URL to redirect back to (it must match the URL you provided when setting up the application),grant_type: This must equalauthorization_code.
Upon receiving this information, we will return a JSON response that contains the following data:
token_type: The type of token (in this caseBearer),access_token: The access token to use for requests,refresh_token: The refresh token to use to refresh theaccess_token,expires_in: The number of seconds until theaccess_tokenexpires.
Refreshing Access Tokens
Once your access token expires you'll need to refresh it in order to get a new
one. To do this you must send a POST request to
https://onshopfront.com/oauth/token with the following fields in a JSON body:
client_id: Theclient_idissued when you created your application,client_secret: Theclient_secretissued when you created your application,refresh_token: The latest refresh token that corresponds to the access token,grant_type: This must equalrefresh_token.
Upon receiving this information, we will return a JSON response that contains the following data:
access_token: The access token to use for requests,refresh_token: A new refresh token to use in the future,expires_in: The number of seconds until theaccess_tokenexpires.
Once you receive this data, you'll need to update your access_token and
refresh_token as previous ones will no longer be valid.
Next Steps
Now that your application is authenticated you're ready to start developing your application!
Application still not authenticated? Check out our how-to guide on authentication.
Making API Calls
Once your application has been authenticated and you have an access token,
you can begin to make requests to the API by providing the access_token in
the Authentication header. For more information, check out the Headers section
below.
A Note About Scopes
Shopfront supports and highly recommends the use of scopes (without them you won't qualify for our partner program). Scopes are essentially permissions that your application requests from the user that allow you to perform a limited amount of functions.
Scopes are only able to be requested during the initial authorization step, if your application later requires more scopes, you'll need to send the user back through the initial authorization.
Currently, if you don't request any scopes, you'll receive access to all scopes however this will prevent you from qualifying for our partner program.
Users are only able to approve scopes that match what permissions they currently
have available to them (for example, a user who can't create products cannot
approve an application which requests the create_products scope).
In order to determine which scope you need to request, you should look at our documentation which will state the required scopes for the function you're performing.