An access token can be generated by combining the api_key and timestamp string with the provided api_secret.
Examples in Different Languages:
PHP Javascript Python Golang Swift Kotlin
Copy $token = hash_hmac ( 'sha256' , '<username>:<api_key>@<timestamp>' , '<api_secret' ) ;
// https://www.php.net/manual/en/function.hash-hmac.php
Copy const crypto = require ( 'crypto' );
const apiKey = 'your_api_key' ;
const apiSecret = 'your_api_secret' ;
const username = 'your_username' ;
const timestamp = ( new Date ()) .toJSON ();
const message = ` ${ username } : ${ apiKey } @ ${ timestamp } ` ;
const accessToken = crypto .createHmac ( 'sha256' , apiSecret) .update (message) .digest ( 'hex' );
Copy import hashlib
import hmac
from datetime import datetime , timezone
api_key = 'your_api_key'
api_secret = 'your_api_secret'
username = 'your_username'
timestamp = datetime . now (timezone.utc). isoformat ()
message = f ' { username } : { api_key } @ { timestamp } '
access_token = hmac . new (api_secret. encode ( 'utf-8' ), msg = message. encode ( 'utf-8' ), digestmod = hashlib.sha256). hexdigest ()
Copy package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"fmt"
"time"
)
func main () {
apiKey := "your_api_key"
apiSecret := "your_api_secret"
username := "your_username"
timestamp := time. Now (). Format (time.RFC3339)
message := fmt. Sprintf ( " %s : %s @ %d " , username, apiKey, timestamp)
hmac := hmac. New (sha256.New, [] byte (apiSecret))
hmac. Write ([] byte (message))
access_token := hex. EncodeToString (hmac. Sum ( nil ))
fmt. Println (signature) // prints the HMAC-SHA256 signature
}
Copy import CommonCrypto
import Foundation
func hmacSha256 ( message : String , key : String ) -> String {
let messageData = message. data ( using : . utf8 ) !
let keyData = key. data ( using : . utf8 ) !
var hmacData = Data ( count : Int ( CC_SHA256_DIGEST_LENGTH ))
hmacData. withUnsafeMutableBytes { hmacPtr in
CCHmac ( CCHmacAlgorithm ( kCCHmacAlgSHA256 ) , (keyData as NSData).bytes, keyData. count , (messageData as NSData).bytes, messageData. count , hmacPtr )
}
return hmacData. map { String ( format : "%02hhx" , $0 ) }. joined ()
}
let apiKey = "your_api_key"
let apiSecret = "your_api_secret"
let username = "your_username"
let dateFormatter = ISO8601DateFormatter ()
dateFormatter.timeZone = TimeZone ( secondsFromGMT : 0 )
let timestamp = dateFormatter. string ( from : Date ())
let message = " \(username) : \(apiKey) @ \(timestamp) "
let accessToken = hmacSha256 ( message : message, key : apiSecret )
Copy import java.nio.charset.StandardCharsets
import java.security.Key
import java.security.MessageDigest
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec
import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
fun main () {
val apiKey = "your_api_key"
val apiSecret = "your_api_secret"
val username = "your_username"
val utcDateTime = LocalDateTime. now (ZoneOffset.UTC)
val offsetDateTime = OffsetDateTime. of (utcDateTime, ZoneOffset.UTC)
val formatter = DateTimeFormatter. ofPattern ( "yyyy-MM-dd'T'HH:mm:ssXXX" )
val timestamp = offsetDateTime. format (formatter)
val message = "$username:$apiKey@$timestamp"
val accessToken = hmacSha256 (message, apiSecret)
}
fun hmacSha256 (message: String , key: String ): String {
val secretKey = SecretKeySpec (key. toByteArray (StandardCharsets.UTF_8), "HmacSHA256" )
val mac = Mac. getInstance ( "HmacSHA256" )
mac. init (secretKey)
val hmac = mac. doFinal (message. toByteArray (StandardCharsets.UTF_8))
return bytesToHex (hmac)
}
fun bytesToHex (bytes: ByteArray ): String {
return bytes. joinToString ( "" ) { "%02x" . format (it) }
}