คำอธิบาย
ใช้ API นี้เพื่อแสดงใบรับรองแก่แพลตฟอร์มที่ใช้ใบรับรองเหล่านี้สำหรับการตรวจสอบสิทธิ์ TLS ได้
สิทธิ์
certificateProvider
ความพร้อมใช้งาน
แนวคิดและการใช้งาน
การใช้งาน API นี้โดยทั่วไปเพื่อแสดงใบรับรองไคลเอ็นต์ใน ChromeOS มีดังนี้
- ส่วนขยายจะลงทะเบียนสำหรับเหตุการณ์
onCertificatesUpdateRequested
และonSignatureRequested
- ส่วนขยายจะเรียก
setCertificates()
เพื่อแสดงรายการใบรับรองเบื้องต้นหลังจากการเริ่มต้น - ส่วนขยายจะตรวจสอบการเปลี่ยนแปลงในรายการใบรับรองและการเรียกใช้
setCertificates()
เพื่อแจ้งให้เบราว์เซอร์ทราบเกี่ยวกับการเปลี่ยนแปลงทั้งหมด - ในระหว่างการแฮนด์เชค TLS เบราว์เซอร์จะได้รับคำขอใบรับรองไคลเอ็นต์ เมื่อใช้เหตุการณ์
onCertificatesUpdateRequested
เบราว์เซอร์จะขอให้ส่วนขยายรายงานใบรับรองทั้งหมดที่ได้รับในปัจจุบัน - ส่วนขยายจะรายงานกลับไปพร้อมใบรับรองที่พร้อมใช้งานในปัจจุบันโดยใช้เมธอด
setCertificates()
- เบราว์เซอร์จะจับคู่ใบรับรองที่มีทั้งหมดกับคำขอใบรับรองไคลเอ็นต์จากโฮสต์ระยะไกล ระบบจะแสดงรายการที่ตรงกันแก่ผู้ใช้ในกล่องโต้ตอบการเลือก
- ผู้ใช้สามารถเลือกใบรับรอง จากนั้นจึงอนุมัติการตรวจสอบสิทธิ์หรือล้มเลิกการตรวจสอบสิทธิ์
- หากผู้ใช้ล้มเลิกการตรวจสอบสิทธิ์หรือไม่มีใบรับรองที่ตรงกับคำขอ ระบบจะล้มเลิกการตรวจสอบสิทธิ์ไคลเอ็นต์ TLS
- มิฉะนั้น หากผู้ใช้อนุมัติการตรวจสอบสิทธิ์ด้วยใบรับรองที่ได้จากส่วนขยายนี้ เบราว์เซอร์จะขอให้ส่วนขยายลงนามข้อมูลเพื่อดำเนินการแฮนด์เชค TLS ต่อไป คําขอจะส่งเป็นเหตุการณ์
onSignatureRequested
- เหตุการณ์นี้มีข้อมูลอินพุต ประกาศว่าต้องใช้อัลกอริทึมใดในการสร้างลายเซ็น และอ้างอิงใบรับรองรายการใดรายการหนึ่งที่ส่วนขยายนี้รายงาน ส่วนขยายจะต้องสร้างลายเซ็นสำหรับข้อมูลที่ระบุโดยใช้คีย์ส่วนตัวที่เชื่อมโยงกับใบรับรองที่อ้างอิง การสร้างลายเซ็นอาจต้องมีการเพิ่ม DigestInfo และใส่ข้อความขยายในผลลัพธ์ก่อนการรับรองจริง
- ส่วนขยายจะส่งลายเซ็นกลับไปยังเบราว์เซอร์โดยใช้เมธอด
reportSignature()
หากคำนวณลายเซ็นไม่ได้ จะต้องเรียกใช้เมธอดโดยไม่มีลายเซ็น - หากมีลายเซ็น เบราว์เซอร์จะทำแฮนด์เชค TLS จนเสร็จเรียบร้อย
ลำดับขั้นตอนจริงอาจแตกต่างออกไป เช่น ระบบจะไม่ขอให้ผู้ใช้เลือกใบรับรองเมื่อมีการใช้นโยบายระดับองค์กรให้เลือกใบรับรองโดยอัตโนมัติ (ดูAutoSelectCertificateForUrls
และนโยบายของ Chrome สำหรับผู้ใช้)
ในส่วนขยาย อาจดูคล้ายกับข้อมูลโค้ดต่อไปนี้
function collectAvailableCertificates() {
// Return all certificates that this Extension can currently provide.
// For example:
return [{
certificateChain: [new Uint8Array(...)],
supportedAlgorithms: ['RSASSA_PKCS1_v1_5_SHA256']
}];
}
// The Extension calls this function every time the currently available list of
// certificates changes, and also once after the Extension's initialization.
function onAvailableCertificatesChanged() {
chrome.certificateProvider.setCertificates({
clientCertificates: collectAvailableCertificates()
});
}
function handleCertificatesUpdateRequest(request) {
// Report the currently available certificates as a response to the request
// event. This is important for supporting the case when the Extension is
// unable to detect the changes proactively.
chrome.certificateProvider.setCertificates({
certificatesRequestId: request.certificatesRequestId,
clientCertificates: collectAvailableCertificates()
});
}
// Returns a private key handle for the given DER-encoded certificate.
// |certificate| is an ArrayBuffer.
function getPrivateKeyHandle(certificate) {...}
// Digests and signs |input| with the given private key. |input| is an
// ArrayBuffer. |algorithm| is an Algorithm.
// Returns the signature as ArrayBuffer.
function signUnhashedData(privateKey, input, algorithm) {...}
function handleSignatureRequest(request) {
// Look up the handle to the private key of |request.certificate|.
const key = getPrivateKeyHandle(request.certificate);
if (!key) {
// Handle if the key isn't available.
console.error('Key for requested certificate no available.');
// Abort the request by reporting the error to the API.
chrome.certificateProvider.reportSignature({
signRequestId: request.signRequestId,
error: 'GENERAL_ERROR'
});
return;
}
const signature = signUnhashedData(key, request.input, request.algorithm);
chrome.certificateProvider.reportSignature({
signRequestId: request.signRequestId,
signature: signature
});
}
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
handleCertificatesUpdateRequest);
chrome.certificateProvider.onSignatureRequested.addListener(
handleSignatureRequest);
ประเภท
Algorithm
ประเภทของอัลกอริทึมลายเซ็นการเข้ารหัสที่รองรับ
ค่าแจกแจง
"RSASSA_PKCS1_v1_5_MD5_SHA1"
ระบุอัลกอริทึมลายเซ็น RSASSA PKCS#1 v1.5 ด้วยการแฮช MD5-SHA-1 ส่วนขยายต้องไม่เพิ่มคำนำหน้า DigestInfo แต่เพิ่ม PKCS#1 เท่านั้น เราเลิกใช้งานอัลกอริทึมนี้แล้ว และ Chrome จะไม่ขออัลกอริทึมนี้อีกตั้งแต่เวอร์ชัน 109
"RSASSA_PKCS1_v1_5_SHA1"
ระบุอัลกอริทึมลายเซ็น RSASSA PKCS#1 v1.5 ด้วยฟังก์ชันแฮช SHA-1
"RSASSA_PKCS1_v1_5_SHA256"
ระบุอัลกอริทึมลายเซ็น RSASSA PKCS#1 v1.5 ด้วยฟังก์ชันการแฮช SHA-256
"RSASSA_PKCS1_v1_5_SHA384"
ระบุอัลกอริทึมลายเซ็น RSASSA PKCS#1 v1.5 ด้วยฟังก์ชันการแฮช SHA-384
"RSASSA_PKCS1_v1_5_SHA512"
ระบุอัลกอริทึมลายเซ็น RSASSA PKCS#1 v1.5 ด้วยฟังก์ชันการแฮช SHA-512
"RSASSA_PSS_SHA256"
ระบุอัลกอริทึมลายเซ็น RSASSA PSS ด้วยฟังก์ชันการแฮช SHA-256, ฟังก์ชันการสร้างมาสก์ MGF1 และ Salt ที่มีขนาดเท่ากับแฮช
"RSASSA_PSS_SHA384"
ระบุอัลกอริทึมลายเซ็น RSASSA PSS ด้วยฟังก์ชันการแฮช SHA-384, ฟังก์ชันการสร้างมาสก์ MGF1 และ Salt ที่มีขนาดเท่ากับแฮช
"RSASSA_PSS_SHA512"
ระบุอัลกอริทึมลายเซ็น RSASSA PSS ด้วยฟังก์ชันการแฮช SHA-512, ฟังก์ชันการสร้างมาสก์ MGF1 และ Salt ที่มีขนาดเท่ากับแฮช
CertificateInfo
พร็อพเพอร์ตี้
-
ใบรับรอง
ArrayBuffer
ต้องเป็นการเข้ารหัส DER ของใบรับรอง X.509 ปัจจุบันรองรับเฉพาะใบรับรองของคีย์ RSA เท่านั้น
-
supportedHashes
แฮช[]
ต้องตั้งค่าเป็นแฮชทั้งหมดที่รองรับสำหรับใบรับรองนี้ ระบบจะขอเฉพาะลายเซ็นของไดเจสต์ที่คำนวณด้วยอัลกอริทึมแฮชเหล่านี้รายการใดรายการหนึ่งเท่านั้น ซึ่งควรเรียงลำดับตามค่ากำหนดแฮชที่ลดลง
CertificatesUpdateRequest
พร็อพเพอร์ตี้
-
certificatesRequestId
ตัวเลข
ตัวระบุคำขอที่จะส่งไปยัง
setCertificates
ClientCertificateInfo
พร็อพเพอร์ตี้
-
certificateChain
บัฟเฟอร์อาร์เรย์[]
อาร์เรย์ต้องมีการเข้ารหัส DER ของใบรับรองไคลเอ็นต์ X.509 เป็นองค์ประกอบแรก
โดยต้องมีใบรับรอง 1 รายการเท่านั้น
-
supportedAlgorithms
อัลกอริทึมทั้งหมดที่รองรับสำหรับใบรับรองนี้ ระบบจะขอให้ส่วนขยายลงนามโดยใช้อัลกอริทึมอย่างใดอย่างหนึ่งเหล่านี้เท่านั้น
Error
ประเภทของข้อผิดพลาดที่ส่วนขยายสามารถรายงานได้
ค่า
Hash
เลิกใช้งานแล้ว แทนที่โดย Algorithm
ค่าแจกแจง
"MD5_SHA1"
ระบุอัลกอริทึมการแฮช MD5 และ SHA1
"SHA1"
ระบุอัลกอริทึมการแฮช SHA1
"SHA256"
ระบุอัลกอริทึมการแฮช SHA256
"SHA384"
ระบุอัลกอริทึมการแฮช SHA384
"SHA512"
ระบุอัลกอริทึมการแฮช SHA512
PinRequestErrorType
ประเภทข้อผิดพลาดที่แสดงแก่ผู้ใช้ผ่านฟังก์ชัน requestPin ได้
ค่าแจกแจง
"INVALID_PIN"
ระบุว่า PIN ไม่ถูกต้อง
"INVALID_PUK"
ระบุว่า PUK ไม่ถูกต้อง
"MAX_ATTEMPTS_EXCEEDED"
ระบุว่าความพยายามเกินจำนวนสูงสุดที่อนุญาตแล้ว
"UNKNOWN_ERROR"
ระบุว่าประเภทข้างต้นแทนข้อผิดพลาดไม่ได้
PinRequestType
ประเภทโค้ดที่ส่วนขยายขอที่มีฟังก์ชัน requestPin
ค่าแจกแจง
"PIN"
ระบุว่ารหัสที่ขอคือ PIN
"PUK"
ระบุว่ารหัสที่ขอเป็น PUK
PinResponseDetails
พร็อพเพอร์ตี้
-
userInput
string ไม่บังคับ
รหัสที่ผู้ใช้ระบุไว้ เว้นว่างไว้หากผู้ใช้ปิดกล่องโต้ตอบหรือเกิดข้อผิดพลาดอื่นๆ
ReportSignatureDetails
พร็อพเพอร์ตี้
-
error
ไม่บังคับ
เกิดข้อผิดพลาดขณะสร้างลายเซ็น (หากมี)
-
signRequestId
ตัวเลข
ตัวระบุคําขอที่ได้รับผ่านเหตุการณ์
onSignatureRequested
-
ลายเซ็น
ArrayBuffer ไม่บังคับ
สร้างลายเซ็น หากสร้างลายเซ็นเรียบร้อยแล้ว
RequestPinDetails
พร็อพเพอร์ตี้
-
attemptsLeft
ตัวเลข ไม่บังคับ
จำนวนครั้งที่เหลือ ซึ่งมีไว้เพื่อให้ UI ใดๆ นำเสนอข้อมูลนี้แก่ผู้ใช้ได้ Chrome ไม่น่าจะบังคับใช้การดำเนินการนี้ แต่ส่วนขยายควรเรียก StopPinRequest ที่มี errorType = MAX_ATTEMPTS_EXCEEDED แทน เมื่อคำขอ PIN มีจำนวนเกินขีดจำกัด
-
errorType
PinRequestErrorType ไม่บังคับ
เทมเพลตข้อผิดพลาดที่แสดงต่อผู้ใช้ ควรตั้งค่านี้หากคำขอก่อนหน้าล้มเหลว เพื่อแจ้งให้ผู้ใช้ทราบเหตุผลที่ล้มเหลว
-
requestType
PinRequestType ไม่บังคับ
ประเภทรหัสที่ขอ ค่าเริ่มต้นคือ PIN
-
signRequestId
ตัวเลข
รหัสที่ Chrome ให้ไว้ใน SignRequest
SetCertificatesDetails
พร็อพเพอร์ตี้
-
certificatesRequestId
ตัวเลข ไม่บังคับ
เมื่อเรียกใช้เพื่อตอบกลับ
onCertificatesUpdateRequested
ควรมีค่าcertificatesRequestId
ที่ได้รับ มิฉะนั้นไม่ควรตั้งค่าใดๆ -
clientCertificates
รายการใบรับรองไคลเอ็นต์ที่พร้อมใช้งานในปัจจุบัน
-
error
ไม่บังคับ
เกิดข้อผิดพลาดขณะดึงข้อมูลใบรับรอง (หากมี) ข้อผิดพลาดนี้จะแสดงต่อผู้ใช้ตามความเหมาะสม
SignatureRequest
พร็อพเพอร์ตี้
-
อัลกอริทึม
อัลกอริทึมลายเซ็นที่จะใช้
-
ใบรับรอง
ArrayBuffer
การเข้ารหัส DER ของใบรับรอง X.509 ส่วนขยายต้องลงนาม
input
โดยใช้คีย์ส่วนตัวที่เชื่อมโยง -
อินพุต
ArrayBuffer
ข้อมูลที่จะลงนาม โปรดทราบว่าไม่มีการแฮชข้อมูล
-
signRequestId
ตัวเลข
ตัวระบุคำขอที่จะส่งไปยัง
reportSignature
SignRequest
พร็อพเพอร์ตี้
-
ใบรับรอง
ArrayBuffer
การเข้ารหัส DER ของใบรับรอง X.509 ส่วนขยายต้องลงนาม
digest
โดยใช้คีย์ส่วนตัวที่เชื่อมโยง -
ไดเจสต์
ArrayBuffer
ไดเจสต์ที่ต้องลงชื่อ
-
แฮช
หมายถึงอัลกอริทึมของแฮชที่ใช้ในการสร้าง
digest
-
signRequestId
ตัวเลข
Chrome 57 ขึ้นไปรหัสที่ไม่ซ้ำกันที่ส่วนขยายจะใช้ในกรณีที่ต้องเรียกใช้เมธอดที่จำเป็นต้องใช้ เช่น requestPin
StopPinRequestDetails
พร็อพเพอร์ตี้
-
errorType
PinRequestErrorType ไม่บังคับ
เทมเพลตข้อผิดพลาด หากมี จะแสดงต่อผู้ใช้ มีจุดประสงค์เพื่อระบุเหตุผลของการหยุดโฟลว์หากเกิดจากข้อผิดพลาด เช่น MAX_ATTEMPTS_EXCEEDED
-
signRequestId
ตัวเลข
รหัสที่ Chrome ให้ไว้ใน SignRequest
วิธีการ
reportSignature()
chrome.certificateProvider.reportSignature(
details: ReportSignatureDetails,
callback?: function,
)
ควรเรียกใช้เป็นการตอบกลับ onSignatureRequested
ท้ายที่สุดส่วนขยายจะต้องเรียกใช้ฟังก์ชันนี้สำหรับทุกเหตุการณ์ onSignatureRequested
การติดตั้งใช้งาน API จะหยุดรอการเรียกนี้หลังจากผ่านไประยะหนึ่ง และจะตอบกลับด้วยข้อผิดพลาดการหมดเวลาเมื่อมีการเรียกใช้ฟังก์ชันนี้
พารามิเตอร์
-
รายละเอียด
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 96 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
requestPin()
chrome.certificateProvider.requestPin(
details: RequestPinDetails,
callback?: function,
)
ขอ PIN จากผู้ใช้ ระบบอนุญาตให้มีคำขอที่ดำเนินอยู่ได้ครั้งละ 1 รายการเท่านั้น คําขอที่ออกในขณะที่ขั้นตอนอื่นกําลังดําเนินการอยู่จะถูกปฏิเสธ ส่วนขยายมีหน้าที่รับผิดชอบที่จะต้องลองอีกครั้งในภายหลังหากมีการดำเนินการขั้นตอนอื่นอยู่
พารามิเตอร์
-
รายละเอียด
มีรายละเอียดเกี่ยวกับกล่องโต้ตอบที่ร้องขอ
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(details?: PinResponseDetails) => void
-
รายละเอียด
PinResponseDetails ไม่บังคับ
-
การคืนสินค้า
-
Promise<PinResponseDetails | undefined>
Chrome 96 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
setCertificates()
chrome.certificateProvider.setCertificates(
details: SetCertificatesDetails,
callback?: function,
)
ตั้งค่ารายการใบรับรองที่จะใช้ในเบราว์เซอร์
ส่วนขยายควรเรียกใช้ฟังก์ชันนี้หลังจากการเริ่มต้น และทุกครั้งที่มีการเปลี่ยนแปลงในชุดใบรับรองที่มีอยู่ในปัจจุบัน ส่วนขยายควรเรียกใช้ฟังก์ชันนี้เพื่อตอบสนองต่อ onCertificatesUpdateRequested
ทุกครั้งที่ได้รับเหตุการณ์นี้ด้วย
พารามิเตอร์
-
รายละเอียด
ใบรับรองที่จะตั้งค่า ระบบจะไม่สนใจใบรับรองที่ไม่ถูกต้อง
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 96 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
stopPinRequest()
chrome.certificateProvider.stopPinRequest(
details: StopPinRequestDetails,
callback?: function,
)
หยุดคำขอ PIN ที่เริ่มต้นโดยฟังก์ชัน requestPin
พารามิเตอร์
-
รายละเอียด
มีรายละเอียดเกี่ยวกับเหตุผลในการหยุดขั้นตอนการส่งคำขอ
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 96 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
เหตุการณ์
onCertificatesRequested
chrome.certificateProvider.onCertificatesRequested.addListener(
callback: function,
)
โปรดใช้ onCertificatesUpdateRequested
แทน
เหตุการณ์นี้จะเริ่มทำงานทุกครั้งที่เบราว์เซอร์ขอรายการใบรับรองปัจจุบันที่ได้รับจากส่วนขยายนี้ ส่วนขยายต้องเรียกใช้ reportCallback
เพียงครั้งเดียวกับรายการใบรับรองปัจจุบัน
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(reportCallback: function) => void
-
reportCallback
ฟังก์ชัน
พารามิเตอร์
reportCallback
มีลักษณะดังนี้(certificates: CertificateInfo[], callback: function) => void
-
ใบรับรอง
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(rejectedCertificates: ArrayBuffer[]) => void
-
rejectedCertificates
บัฟเฟอร์อาร์เรย์[]
-
-
-
onCertificatesUpdateRequested
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
callback: function,
)
เหตุการณ์นี้จะเริ่มทำงานหากใบรับรองที่ตั้งค่าผ่าน setCertificates
ไม่เพียงพอ หรือเบราว์เซอร์ขอข้อมูลที่อัปเดต ส่วนขยายต้องเรียกใช้ setCertificates
พร้อมรายการใบรับรองที่อัปเดตและ certificatesRequestId
ที่ได้รับ
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(request: CertificatesUpdateRequest) => void
-
ส่งคำขอ
-
onSignatureRequested
chrome.certificateProvider.onSignatureRequested.addListener(
callback: function,
)
เหตุการณ์นี้จะเริ่มทำงานทุกครั้งที่เบราว์เซอร์ต้องเซ็นชื่อกำกับข้อความโดยใช้ใบรับรองที่ส่วนขยายนี้ส่งให้ผ่าน setCertificates
ส่วนขยายต้องลงนามข้อมูลอินพุตจาก request
โดยใช้อัลกอริทึมและคีย์ส่วนตัวที่เหมาะสม และส่งคืนโดยเรียกใช้ reportSignature
ด้วย signRequestId
ที่ได้รับ
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(request: SignatureRequest) => void
-
ส่งคำขอ
-
onSignDigestRequested
chrome.certificateProvider.onSignDigestRequested.addListener(
callback: function,
)
โปรดใช้ onSignatureRequested
แทน
เหตุการณ์นี้จะเริ่มทำงานทุกครั้งที่เบราว์เซอร์ต้องเซ็นชื่อกำกับข้อความโดยใช้ใบรับรองที่ส่วนขยายนี้ให้ไว้เพื่อตอบกลับเหตุการณ์ onCertificatesRequested
ส่วนขยายต้องลงนามในข้อมูลใน request
โดยใช้อัลกอริทึมและคีย์ส่วนตัวที่เหมาะสม และส่งคืนด้วยการเรียก reportCallback
ต้องเรียก reportCallback
เพียงครั้งเดียว
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(request: SignRequest, reportCallback: function) => void
-
ส่งคำขอ
-
reportCallback
ฟังก์ชัน
Chrome 47 ขึ้นไปพารามิเตอร์
reportCallback
มีลักษณะดังนี้(signature?: ArrayBuffer) => void
-
ลายเซ็น
ArrayBuffer ไม่บังคับ
-
-