Cihaz İmzası
Tanımlı cihazlar imzalama işlemi ile istek kaynağını ispatlar.
Aktivasyon
Login isteğinde deviceId gönderilirse isteğin mobil client'tan geldiği varsayılır ve imza doğrulaması ile cihazın tanımlı olup olmadığı kontrol edilir. Her hesabın tek aktif cihazı olabilir.
Login sonucunda client'a x-auth dışında cihaz kaydı yapması için üretilmiş ot-auth token döner. Client secp256r1 eliptik eğrisini kullanarak cihaz üstünde keypair oluşturur ve point of infinity kontrolü yapar. Private key cihazda saklanır ve gelecek imzalama işlemleri için kullanılır. Client ot-auth kullanarak /user/insert-device endpoint'ini çağırır, standart cihaz bilgileri dışında oluşturuşmuş olduğu keypair'in public key'ini de isteğe ekler.
API kullanıcının cihazını ve ilişkili olduğu keypair'in public key'ini kaydeder. Gelecek imzaları doğrulamak için public key kullanılır.
Public key hex string olarak gönderilmelidir. Birden fazla gösterimi vardır.
- Uncompressed:
04+ 64 bytes (65 bytes total) - Compressed:
03 | 02+ 32 bytes (33 bytes total)

Ayrıntılar
- Bir kullanıcı için cihaz kaydı yapılırken, verilen
deviceIdveuserIdile ilişkili var olan kayıtlar pasif duruma alınır.- Daha önceden aynı cihazdan(aynı
deviceId) farklı bir hesap için cihaz kaydı yapılmış ise bu kayıt pasif duruma düşer. - Daha önce farklı bir cihazdan aynı kullanıcı(aynı
userId) cihaz kaydı yapmış ise bu kayıt pasif duruma düşer. Eski cihaz artık tanımlı cihaz değildir.
- Daha önceden aynı cihazdan(aynı
İmzalama
| Header | Desc |
|---|---|
f-timestamp | İstek anındaki epoch timestamp (milliseconds) |
f-signature | Cihazdaki private key ile oluşturulan imza |
İmzalama işlemi aşağıdaki gibi ilerler. Timestamp ve deviceId alt çizgi ile birleştirilir. Bu string'in sha256 hash'i alınır ve private key kullanılarak hash imzalanır.
payload = `${timestamp}_${device_id}`;
payload_hash = sha256(payload);
signature = secp256k1.sign(payload_hash, private_key);
Tanımlı cihazdan giriş
Login 2FA method priority sıralamasında PUSH ilk sıradadır.
Login sırasında mobil cihazların deviceId göndermesi gerektiğinden bahsetmiştik. Eğer önceki bir loginde cihaz aktivasyonu yapılmış ve keypair oluşturulmuş ise client login isteğine imza ekler.
İmzalı login isteği atılması sonucunda aşağıdaki gibi bir repsonse gönderilir.
{
"challenge": {
"challengeId": "yiTamgsoimWgLh14",
"ts": 1754553529150,
"status": "COMPLETED",
"expire": 600,
"methodList": []
},
"result": {
"action": "LOGIN",
"challengeId": "yiTamgsoimWgLh14",
"execResult": {
"success": true,
"data": {
"sessionKey": "7bf93bb0a00a4c64fcf2dc4f3d63ca924fb842d346a0b5f5404eec966f650700"
}
}
}
}
Response'ta challenge methods boş array ve status COMPLETED olarak döner. Tokenlar headers içindedir.