การตรวจสอบสิทธิ์แอปและบัญชี¶
กระบวนการตรวจสอบสิทธิ์ของ cTrader Open API ใช้มาตรฐาน OAuth 2.0
เฟรมเวิร์กนี้ช่วยให้แอปพลิเคชันของบุคคลที่สามสามารถเข้าถึงบริการได้อย่างจำกัด โดยการประสานงานระหว่างเจ้าของทรัพยากรและบริการ หรือโดยอนุญาตให้แอปพลิเคชันของบุคคลที่สามเข้าถึงได้ด้วยตนเอง
ขั้นตอนการตรวจสอบสิทธิ์ ¶
ตามมาตรฐาน OAuth 2.0 การตรวจสอบสิทธิ์บัญชีต้องใช้ทั้งรหัสอนุญาตและโทเค็นการเข้าถึง
กำหนดโทเค็น
รหัสอนุญาตคือโทเค็นระยะสั้นที่ออกให้สำหรับ cTID แต่ละรายการ ระยะเวลาหมดอายุคือหนึ่งนาที โทเค็นการเข้าถึงคือโทเค็นระยะยาวที่อนุญาตให้แอปพลิเคชันส่งและรับข้อความไปยังและจาก backend ของ cTrader หลังจากได้รับแล้ว รหัสอนุญาตต้องถูกแลกเปลี่ยนเป็นโทเค็นการเข้าถึงอย่างรวดเร็ว หลังจากนั้นข้อความทั้งหมดที่ส่งไปยัง backend ของ cTrader จะต้องลงนามด้วยโทเค็นการเข้าถึงที่ได้รับเพื่อตรวจสอบสิทธิ์แอปพลิเคชันของคุณ ระยะเวลาหมดอายุของโทเค็นการเข้าถึงคือ 2,628,000 วินาที (ประมาณ 30 วัน) หลังจากหมดอายุแล้ว สามารถสร้างโทเค็นการเข้าถึงใหม่ได้โดยใช้โทเค็นรีเฟรช โทเค็นรีเฟรชไม่มีระยะเวลาหมดอายุ
โดยทั่วไป กระบวนการที่ผู้ใช้ใหม่เริ่มใช้แอปพลิเคชันของคุณเป็นครั้งแรกมีลักษณะดังนี้:
1. ผู้ใช้ที่มี cTID หนึ่งเข้าถึงแอปพลิเคชันของคุณไม่ว่าจะถูกใช้งานที่ใด ผู้ใช้จะโต้ตอบกับปุ่มดำเนินการหรือสิ่งที่เทียบเท่า
2. แอปพลิเคชันใช้เบราว์เซอร์ที่ฝังไว้ (หรือวิธีการอื่นที่เหมาะสม) เพื่อเปลี่ยนเส้นทางผู้ใช้ไปยัง URI เฉพาะที่พวกเขาจะให้สิทธิ์ที่จำเป็นแก่แอป
สร้างความไว้วางใจ
ก่อนเปลี่ยนเส้นทางผู้ใช้ไปยัง URI นี้ ตรวจสอบให้แน่ใจว่าผู้ใช้ไว้วางใจแอปพลิเคชันของคุณและทราบว่าพวกเขาจะต้องให้สิทธิ์เพิ่มเติม
3. ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยัง URL ที่กำหนดไว้ล่วงหน้า URL นี้มีโทเค็นการเข้าถึงเป็นค่าของพารามิเตอร์ code
4. ผู้ใช้จะถูกเปลี่ยนเส้นทางกลับไปยังแอปพลิเคชันด้วยตนเองหรือโดยอัตโนมัติ แอปพลิเคชันจะได้รับทราบค่าของพารามิเตอร์ code
5. แอปพลิเคชันส่งคำขอเพื่อแลกเปลี่ยนรหัสอนุญาตกับโทเค็นการเข้าถึงไปยัง endpoint เฉพาะ
6. แอปพลิเคชันได้รับคำตอบที่มีโทเค็นการเข้าถึงเป็นค่าของคีย์ accessToken
7. แอปพลิเคชันส่งข้อความ ProtoOAApplicationAuthReq ที่มีฟิลด์ clientId และ clientSecret
8. แอปพลิเคชันส่งข้อความ ProtoOAGetAccountListByAccessTokenReq ที่มีฟิลด์ accessToken คำตอบ (ProtoOAGetAccountListByAccessTokenRes) มีฟิลด์ ctidTraderAccountId ที่ซ้ำกัน
9. หลังจากได้รับคำตอบ แอปพลิเคชันส่งข้อความ ProtoOAAccountAuthReq ที่มีฟิลด์ ctidTraderAccountId และ accessToken
หลังจากนั้น ผู้ใช้ควรได้รับการตรวจสอบสิทธิ์ภายใต้บัญชีที่ ctidTraderAccountId ตรงกับ ctidTraderAccountId ที่ให้ไว้ในขั้นตอนที่ 8
แผนภาพด้านล่างอธิบายว่าขั้นตอนพื้นฐานของการตรวจสอบสิทธิ์ทำงานอย่างไรจากมุมมองของแอปพลิเคชัน Open API ของคุณ
graph TB
A([เปลี่ยนเส้นทางผู้ใช้ไปยัง <br/> URI เฉพาะ]) ==> B([รับรหัสการอนุญาต <br/> ]);
B ==> C([ส่งคำขอเพื่อรับ <br/> รหัสการเข้าถึง]);
C ==> D([ส่ง ข้อความ <br/> ProOAApplicationAuthReq <br/> ]);
D ==> E([ส่ง ข้อความ <br/> ProtoOAAccountAuthReq <br/> ]); ในส่วนย่อยด้านล่าง เราจะอธิบายขั้นตอนสำคัญของกระบวนการตรวจสอบสิทธิ์อย่างละเอียด
เพิ่ม URI ที่เปลี่ยนเส้นทาง ¶
ดังที่แสดงไว้ก่อนหน้านี้ แอปพลิเคชันของคุณต้องได้รับรหัสอนุญาตหลังจากผู้ใช้ถูกส่งไปยัง URI ที่เปลี่ยนเส้นทางเฉพาะ URI นี้จะรวมรหัสอนุญาตเป็นค่าของพารามิเตอร์ code
เพื่อเพิ่ม URI ที่เปลี่ยนเส้นทางใหม่ ให้ทำดังนี้:
1. เปิดหน้า Applications ในพอร์ทัล Open API
2. เลือกปุ่ม Edit ในแถวที่มีแอปพลิเคชันที่คุณต้องการเพิ่ม URL ที่เปลี่ยนเส้นทาง
3. ในหน้าจอที่ปรากฏขึ้นใหม่ เลื่อนลงไปที่ส่วน Redirect URIs

4. เพิ่ม URL ที่เปลี่ยนเส้นทางในช่องข้อความว่างที่พร้อมใช้งาน หากไม่มีช่องว่างแสดงขึ้น ให้เลือกปุ่ม Add redirect URI
5. เลือกปุ่ม Save ที่ด้านล่างของหน้าเพื่อบันทึกการเปลี่ยนแปลงของคุณ
จัดการ URI ที่เปลี่ยนเส้นทาง
URI ที่เปลี่ยนเส้นทางแรกสุดคือสำหรับบริการ Playground ที่อนุญาตให้คุณทดสอบแอปพลิเคชันของคุณก่อนให้ผู้ใช้ทั่วไปเข้าถึง ห้ามใช้สำหรับแอปพลิเคชันที่ใช้งานจริง คุณสามารถเพิ่ม URI ที่เปลี่ยนเส้นทางได้ไม่จำกัดหากจำเป็น
รับรหัสอนุญาต ¶
เพื่อรับรหัสอนุญาตสำหรับ cTID เฉพาะ แอปพลิเคชันของคุณจะต้องส่งผู้ใช้ไปยัง URI ต่อไปนี้
https://id.ctrader.com/my/settings/openapi/grantingaccess/?client_id={clientId}&redirect_uri={your_redirectURI}&scope={scope}&product=web
หมายเหตุ
ในขั้นตอนนี้ ผู้ใช้จะต้องอนุญาตให้แอปพลิเคชันหรือบริการของคุณเข้าถึงบัญชีเทรดของพวกเขา ดังนั้น จึงจำเป็นอย่างยิ่งที่คุณต้องให้ผู้ใช้เข้าใจอย่างเต็มที่ว่าการใช้แอปพลิเคชันหรือบริการของคุณจะต้องใช้สิทธิ์ใดบ้าง เกี่ยวกับการจัดเก็บข้อมูลและการประมวลผลข้อมูล
URI นี้มีพารามิเตอร์คำถามต่อไปนี้
| พารามิเตอร์ | จำเป็นหรือไม่? | คำจำกัดความ |
|---|---|---|
client_id | ใช่ | ตัวระบุเฉพาะของแอปพลิเคชัน Open API ของคุณ |
redirect_uri | ใช่ | URI ที่เปลี่ยนเส้นทางที่ถูกต้องที่ระบุในการตั้งค่าของแอปพลิเคชันของคุณ |
scope | ใช่ | ขอบเขตของสิทธิ์ที่คุณต้องการให้แอปพลิเคชันของคุณ ค่าต่อไปนี้ได้รับการยอมรับ:accounts ให้สิทธิ์การเข้าถึงแบบอ่านอย่างเดียว แอปพลิเคชันของคุณจะสามารถเข้าถึงข้อมูลและสถิติของบัญชีได้ แต่จะไม่สามารถดำเนินการเทรดได้trading. ให้สิทธิ์การเข้าถึงเต็มที่ทั้งข้อมูลและสถิติของบัญชีรวมถึงการดำเนินการเทรดที่ได้รับอนุญาตทั้งหมด |
product | ไม่ใช่ | หากระบุพารามิเตอร์นี้และตั้งค่าเป็น web หน้าจอการอนุญาตจะไม่มีส่วนหัวและส่วนท้าย ซึ่งทำให้ดูดีขึ้นบนอุปกรณ์มือถือ แม้ว่าพารามิเตอร์นี้จะเป็นทางเลือก แต่เราขอแนะนำให้ตั้งค่าเป็น web |
เพื่อดู client_id ของคุณ ไปที่หน้า Applications และเลือกปุ่ม View ในคอลัมน์ Credentials
หลังจากผู้ใช้ถูกส่งไปยัง URI ด้านบน (และตราบใดที่ทั้งสองพารามิเตอร์ถูกต้อง) พวกเขาควรเห็นหน้าจอเข้าสู่ระบบ/สมัครสมาชิกที่ขอให้พวกเขาอนุญาตภายใต้ cTID ของพวกเขา หลังจากนั้น ผู้ใช้จะเห็นกล่องโต้ตอบที่พวกเขาจะสามารถอนุญาตให้แอปพลิเคชันเข้าถึงบัญชีหนึ่งบัญชีหรือมากกว่าที่เชื่อมโยงกับ cTID ของพวกเขา
เมื่อผู้ใช้เลือกปุ่ม Allow access พวกเขาจะถูกเปลี่ยนเส้นทางกลับไปยัง redirect_uri ที่คุณระบุไว้เดิม ดังที่แสดงในตัวอย่างด้านล่าง รหัสอนุญาตจะถูกเพิ่มเข้าไปใน URI นี้เป็นพารามิเตอร์คำถาม
https://my-redirect-uri.com/?code=123ASDASffdg_as234_GCllkoq14adRB7_tvN
ณ จุดนี้ แอปพลิเคชันของคุณจะต้องเข้าถึงและเก็บค่าของพารามิเตอร์ code จะต้องถูกแลกเปลี่ยนเป็นโทเค็นการเข้าถึงอย่างรวดเร็วก่อนที่รหัสอนุญาตจะหมดอายุ
บัญชีเพิ่มเติม
หากผู้ใช้สร้างบัญชีเพิ่มเติมหลังจากดำเนินการตามขั้นตอนที่อธิบายไว้ข้างต้น บัญชีเหล่านี้จะไม่ได้รับการตรวจสอบสิทธิ์ภายในแอปพลิเคชัน แทนที่ ผู้ใช้จะต้องถูกเปลี่ยนเส้นทางกลับไปยัง URL ที่ให้ไว้ด้านบนเพื่อให้พวกเขาสามารถให้แอปพลิเคชันเข้าถึงบัญชีเพิ่มเติมใดๆ ที่พวกเขาได้สร้างขึ้นตั้งแต่เข้าสู่ระบบครั้งล่าสุด
การตรวจสอบสิทธิ์ผ่าน Google
หาก URI ด้านบนถูกเปิดผ่าน WebView และผู้ใช้เลือก Google เพื่อเข้าสู่ระบบ Google จะแสดงหน้า Access blocked ซึ่งป้องกันไม่ให้ผู้ใช้ดำเนินการต่อไป
เพื่อป้องกันสิ่งนี้ ตรวจสอบให้แน่ใจว่าลายเซ็น user-agent ของอุปกรณ์ที่เปิดหน้าดูเหมือนดังนี้
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
รับโทเค็นการเข้าถึง ¶
เพื่อรับโทเค็นการเข้าถึง ให้ทำการเรียก REST API ต่อไปนี้
URL ที่เกี่ยวข้อง
URL คำขอเกี่ยวข้องกับ https://openapi.ctrader.com
| วิธีการ | URL |
|---|---|
GET | apps/token |
คำขอนี้รวมพารามิเตอร์คำถามต่อไปนี้
| พารามิเตอร์ | จำเป็นหรือไม่? | คำจำกัดความ |
|---|---|---|
grant_type | ใช่ | ประเภทของโทเค็นที่ส่งไปยัง endpoint นี้ ค่าต่อไปนี้ได้รับการยอมรับ.authorization_code. ส่งรหัสอนุญาตไปยัง endpoint เพื่อแลกเปลี่ยนเป็นโทเค็นการเข้าถึง.refresh_token. ส่งโทเค็นรีเฟรชไปยัง endpoint เพื่อรีเฟรชโทเค็นการเข้าถึงที่มีอยู่ |
code | ไม่ใช่ | โทเค็นที่ส่งไปยัง endpoint พารามิเตอร์นี้จำเป็นหาก grant_type=authorization_code |
redirect_uri | ไม่ใช่ | URI ที่เปลี่ยนเส้นทางที่ถูกต้องที่ระบุในการตั้งค่าของแอปพลิเคชันของคุณ พารามิเตอร์นี้จำเป็นหาก grant_type=authorization_code |
client_id | ใช่ | ตัวระบุเฉพาะของแอปพลิเคชัน Open API ของคุณ |
client_secret | ใช่ | คีย์ลับที่กำหนดให้กับแอปพลิเคชัน Open API ของคุณ |
ตัวอย่างคำขอสามารถพบได้ด้านล่าง
curl -X GET 'https://openapi.ctrader.com/apps/token?grant_type=authorization_code&code=0ssdgds98as9_QSF56FVC_22dfdf&redirect_uri=https://spotware.com&client_id=5430012&client_secret=012sds23dlkjQsd' -H 'Accept: application/json' -H 'Content-Type: application/json'
เพื่อดู client_secret ของคุณ กลับไปที่หน้า Applications และเลือกปุ่ม View ในคอลัมน์ Credentials
เมื่อคำขอสำเร็จ คุณควรได้รับคำตอบที่มีคีย์ต่อไปนี้
| คีย์ | ประเภทค่า | คำจำกัดความ |
|---|---|---|
"accessToken" | สตริง | โทเค็นการเข้าถึงที่แอปพลิเคชันของคุณจะใช้เพื่อตรวจสอบสิทธิ์ข้อความที่ส่งไปยัง cTrader Open API |
"tokenType" | สตริง | ประเภทของโทเค็นการเข้าถึง (bearer"" ควรเป็นค่าของคีย์นี้เนื่องจากใช้มาตรฐาน REST เพื่อทำคำขอ) |
"expiresIn" | integer | จำนวนวินาทีที่ต้องผ่านไปก่อนที่โทเค็นการเข้าถึงจะหมดอายุ (โดยค่าเริ่มต้น ค่าของคีย์นี้เท่ากับ 2628000) |
"refreshToken" | สตริง | โทเค็นรีเฟรชที่ต้องใช้สำหรับการต่ออายุโทเค็นการเข้าถึงเมื่อหมดอายุ โทเค็นรีเฟรชไม่มีเวลาหมดอายุเอง |
"errorCode" | string/null | รหัสข้อผิดพลาดที่อธิบายสาเหตุที่คำขอไม่สำเร็จ สำหรับคำขอที่สำเร็จ ค่าของคีย์นี้ควรเป็น null |
"description" | string/null | คำอธิบายของข้อผิดพลาดที่เกิดขึ้นระหว่างคำขอที่ไม่สำเร็จ สำหรับคำขอที่สำเร็จ ค่าของคีย์นี้ควรเป็น null |
สำหรับตัวอย่างการตอบกลับที่สำเร็จ โปรดดูตัวอย่างด้านล่าง
{
"accessToken":"mos8Bw3D4EG0fRPd4Eqq0JxaFT4zjd8e4YijNezh_ag",
"tokenType":"bearer",
"expiresIn":2628000,
"refreshToken":"VCuafFhy81AFZjsWkbuEzdOhhRj5YTWz8fWUwHam7KM",
"errorCode":null,
"description":null,
}
ส่งข้อความ ProtoBuf ที่จำเป็น ¶
หลังจากได้รับรหัสการเข้าถึงที่ถูกต้อง แอปพลิเคชันของคุณจะต้องส่งข้อความ ProtoOAApplicationAuthReq, ProtoOAGetAccountListByAccessTokenReq และ ProtoOAAccountAuthReq สามารถทำได้ดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | |
รีเฟรชโทเค็นการเข้าถึง ¶
หลังจากโทเค็นการเข้าถึงหมดอายุ คุณจะต้องต่ออายุโดยใช้ refreshToken ที่คุณได้รับก่อนหน้านี้ คุณสามารถดำเนินการนี้ได้ผ่านสองวิธีที่แตกต่างกัน
ส่งคำขอ HTTP¶
เพื่อรับโทเค็นการเข้าถึงใหม่ (และโทเค็นรีเฟรชใหม่ตามมา) คุณสามารถส่งคำขอ HTTP เดียวกัน ที่กล่าวถึงข้างต้น ดังที่แสดงในตัวอย่างด้านล่าง คุณจะต้องตั้งค่าพารามิเตอร์ grant_type เป็น refresh_token
curl -X POST 'https://openapi.ctrader.com/apps/token?grant_type=refresh_token&refresh_token=asdXCVCVAS_218kjashf_asdasd2ASD_223x&client_id=5430012&client_secret=012sds23dlkjQsd' -H 'Accept: application/json' -H 'Content-Type: application/json'
คุณจะได้รับคำตอบที่มีค่าใหม่ของคีย์ accessToken และ refreshToken คุณสามารถใช้ค่าใหม่เหล่านี้ได้อย่างปลอดภัย ในขณะที่ค่าเดิมของคีย์เดียวกันจะถูกยกเลิกโดยอัตโนมัติ
ส่งข้อความ Protobuf¶
หรือคุณสามารถส่งข้อความ ProtoOARefreshTokenReq และรับข้อความ ProtoOARefreshTokenRes ที่มีโทเค็นใหม่ที่ถูกต้อง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 | |
ใช้ Playground ¶
Playground ให้วิธีการที่รวดเร็วในการรับโทเค็นการเข้าถึงสำหรับ cTID ของคุณเอง ช่วยให้คุณสามารถพัฒนาและทดสอบแอปพลิเคชันได้อย่างรวดเร็วและง่ายดายก่อนที่จะเผยแพร่ให้กับกลุ่มเป้าหมาย
เพื่อเข้าถึง Playground ให้ไปที่หน้า Applications และเลือกปุ่ม Playground ในหน้าต่างที่ปรากฏขึ้นใหม่ ให้เลือกขอบเขตของแอปพลิเคชันและคลิกปุ่ม Get token
หลังจากนั้น คุณควรเห็นหน้าต่อไปนี้

คุณสามารถใช้โทเค็นการเข้าถึงและโทเค็นรีเฟรชสำหรับการส่งข้อความไปยัง API ในขณะที่ได้รับการรับรองภายใต้ cTID ของคุณเอง