Requesting Custom Claims on your Access Token
You can now add your own custom fields on the access token that your receive from Cotter

Use Case

Let's say you have a user with attributes:
1
{
2
"username": "helloworld",
3
"role": "admin"
4
}
Copied!
And you want to include this in Cotter's Access Token so that you can quickly access them in your API Middleware, you can now do this by calling an API request.
post
https://www.cotter.app/api/v0
/token/custom
Request Custom Claims on Cotter's Access Token

Example Request

1
POST https://www.cotter.app/api/v0/token/custom
2
Content-Type: application/json
3
API_KEY_ID: <API KEY ID>
4
API_SECRET_KEY: <API SECRET KEY>
5
​
6
{
7
"token": "eyJhbGciOiJFUzI1NiIsImtpZCI6I...", // The access token that you get when the user login with Cotter
8
"custom_attributes": { // Additional attributes that you want to add to the original token
9
"username": "helloworld",
10
"role": "admin",
11
"user_id": 125
12
},
13
"refresh_token": "1234:wfawgaw4gaw4gaw....." // (Optional) A valid refresh token, if given, will generate a new refresh token that will attach the custom attributes to new access tokens / id tokens
14
}
Copied!

Persisting the Custom Claims

When you called this API with a refresh_token , the returned refresh_token can be used to generate new access_token and id_token that have the custom claims. This custom claims also persists through refresh token rotation that originates from the refresh_token that you receive from this API call.
To use this with the JS SDK, you can update the refresh_token stored in the user's browser using the JS SDK: Update Refresh Token (for Custom Claims)

Try it out at JWT.io

Request Body with the Original Access Token

Request Body
Decoded Token
1
{
2
"token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IlNQQUNFX0pXVF9QVUJMSUM6NkNFRTRBMEUtM0M0Ny00ODk1LUFCNjYtRjhFMDc2MTE1MzJGIiwidHlwIjoiSldUIn0.eyJhdWQiOiJhNDQ3MTc5NC04ZWU4LTRkODgtYjMyMS01ZjdhMjI4MDNkNDMiLCJhdXRoZW50aWNhdGlvbl9tZXRob2QiOiJTT0NJQUxfTE9HSU4iLCJjbGllbnRfdXNlcl9pZCI6IjU1MjIyNjFhLWFjN2UtNGQ2ZS1iMDU2LTk1OWY2MTJmYjM0YSIsImV4cCI6MTU5OTE4MTIwMywiaWF0IjoxNTk5MTc3NjAzLCJpZGVudGlmaWVyIjoicHV0cmlAY290dGVyLmFwcCIsImlzcyI6Imh0dHBzOi8vd3d3LmNvdHRlci5hcHAiLCJqdGkiOiJkNDAzOWM2YS1kMWNiLTQ0YTItYjA0OC0xOGU1YmMxZTIxNmIiLCJzY29wZSI6ImFjY2VzcyIsInN1YiI6IjU1MjIyNjFhLWFjN2UtNGQ2ZS1iMDU2LTk1OWY2MTJmYjM0YSIsInR5cGUiOiJjbGllbnRfYWNjZXNzX3Rva2VuIn0.U0Qz0ezHN04QrGnPzn7WlYsR-5_94dQ0K4ovMhcUF4qhJMhEdGODkZGcaJ4ylCT7JqDP5REO2nK3W9mj6uAj5w",
3
"custom_attributes": {
4
"username": "helloworld",
5
"role": "admin",
6
"user_id": 125
7
}
8
}
Copied!
1
{
2
"aud": "a4471794-8ee8-4d88-b321-5f7a22803d43",
3
"authentication_method": "SOCIAL_LOGIN",
4
"client_user_id": "5522261a-ac7e-4d6e-b056-959f612fb34a",
5
"exp": 1599181203,
6
"iat": 1599177603,
7
"identifier": "[email protected]",
8
"iss": "https://www.cotter.app",
9
"jti": "d4039c6a-d1cb-44a2-b048-18e5bc1e216b",
10
"scope": "access",
11
"sub": "5522261a-ac7e-4d6e-b056-959f612fb34a",
12
"type": "client_access_token"
13
}
Copied!

Response with the new Custom Attributes

JavaScript
Decoded Token
1
{
2
"token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IlNQQUNFX0pXVF9QVUJMSUM6NkNFRTRBMEUtM0M0Ny00ODk1LUFCNjYtRjhFMDc2MTE1MzJGIiwidHlwIjoiSldUIn0.eyJhdWQiOlsiYTQ0NzE3OTQtOGVlOC00ZDg4LWIzMjEtNWY3YTIyODAzZDQzIl0sImV4cCI6MTU5OTE4MTIwMywiaWF0IjoxNTk5MTc3NjAzLCJpc3MiOiJodHRwczovL3d3dy5jb3R0ZXIuYXBwIiwianRpIjoiZDQwMzljNmEtZDFjYi00NGEyLWIwNDgtMThlNWJjMWUyMTZiIiwicm9sZSI6ImFkbWluIiwic3ViIjoiNTUyMjI2MWEtYWM3ZS00ZDZlLWIwNTYtOTU5ZjYxMmZiMzRhIiwidXNlcl9pZCI6MTI1LCJ1c2VybmFtZSI6ImhlbGxvd29ybGQifQ.O8te8naeRuYcXG6mLRc7FJ4a3TrBJlaJutzUCqJA8ncItAK9BKedV0TykLOhw_AmCAr-fz8bhbwi3XNUJmN8SQ"
3
}
Copied!
1
{
2
"aud": "a4471794-8ee8-4d88-b321-5f7a22803d43",
3
"authentication_method": "SOCIAL_LOGIN",
4
"client_user_id": "5522261a-ac7e-4d6e-b056-959f612fb34a",
5
"exp": 1599181203,
6
"iat": 1599177603,
7
"identifier": "[email protected]",
8
"iss": "https://www.cotter.app",
9
"jti": "d4039c6a-d1cb-44a2-b048-18e5bc1e216b",
10
"role": "admin",
11
"scope": "access",
12
"sub": "5522261a-ac7e-4d6e-b056-959f612fb34a",
13
"type": "client_access_token",
14
"user_id": 125,
15
"username": "helloworld"
16
}
Copied!
Last modified 11mo ago