OAuth style authentication integration.
THIS GUIDE IS INCOMPLETE
- Register an application in your destiny.gg profile if you haven't.
- Copy the ID (
client_id
) and Secret from your application
- Send user to authorize url
/oauth/authorize
, the user logs in... - Get response
code
from the URL then do a token exchange/oauth/token
api call for anaccess_token
- Use the access token to get the user info
/api/userinfo?token=x8yf[...]f0c
GET https://www.destiny.gg/oauth/authorize
Parameter | Value |
response_type | must be "code" - indicates that you expect to receive an authorization code |
client_id | The client ID you received when you first created the application |
redirect_uri | Indicates the URL to return to after authorization is complete, such as org.example.app://redirect |
state | Arbitrary alphanumeric string that you'll send and then verify, max 64 characters long. |
code_challenge | The code challenge generated as described below |
let secret = hash("sha256", CLIENT_SECRET)
let code_verifier = 'Fwef[...]8ehyf9' // Random URL-safe string with a minimum length of 43 characters.
let code_challenge = base64_encode(hash("sha256", code_verifier + secret))
Destiny.gg will issue a 302 redirect to the url specified in the redirect_uri
with the state
and code
parameters.
Location: org.example.app://redirect?state=...&code=...
You should check that the state
against the initial value.
The code
can then be used to do a token exchange.
Exchange your authorization code
for an access_token
GET https://www.destiny.gg/oauth/token
Parameter | Value |
grant_type | Must be "authorization_code" |
code | The client will send the authorization code it obtained in the redirect |
client_id | The application’s registered client ID |
redirect_uri | The redirect URL that was used in the initial authorization request |
code_verifier | The code verifier portion used in the initial /oauth/authorize endpoint (see above would be 'Fwef[...]8ehyf9') |
{
"access_token" : "VdD03YOa2GYbjfnpZm0hhzb7OeyvO5Fp5lWOQbFlYGKQ4MVN1iEZcmwJh5VBFhYf",
"refresh_token" : "kWGB9cxqxUJXsHDA2S0rbOaqStaxEmPu1R0Eu9kqkchMXnu34shGYYcH3iDIqE7R",
"expires_in" : 3600,
"scope" : "identify",
"token_type" : "bearer"
}
When an access_token
expires, you will receive the following error
{
"error" : "token_expired",
"message" : "The token has expired.",
"code" : 403
}
GET https://www.destiny.gg/oauth/token
Parameter | Value |
grant_type | Must be "refresh_token" |
client_id | The application’s registered client ID |
refresh_token | The refresh token |
The response is the same as the token exchange response.