WebOTP API hiện có thể nhận OTP từ bên trong iframe.
Mã OTP qua SMS (mật khẩu một lần) thường được dùng để xác minh số điện thoại, cho ví dụ như bước thứ hai trong quy trình xác thực hoặc để xác minh khoản thanh toán trên web. Tuy nhiên, việc chuyển đổi giữa trình duyệt và ứng dụng SMS, để sao chép-dán hoặc theo cách thủ công nhập OTP khiến người dùng dễ mắc lỗi và gây phiền hà cho trải nghiệm người dùng.
API WebOTP cung cấp cho các trang web khả năng lập trình lấy mật khẩu một lần từ tin nhắn SMS và nhập mật khẩu đó tự động ở dạng biểu mẫu cho người dùng chỉ bằng một lần nhấn mà không cần chuyển đổi . Tin nhắn SMS được định dạng đặc biệt và liên kết với nguồn gốc để giảm thiểu cũng có nguy cơ bị các trang web lừa đảo đánh cắp OTP.
Một trường hợp sử dụng chưa được hỗ trợ trong WebOTP là nhắm đến một nguồn gốc bên trong iframe. Thông tin này thường được sử dụng để xác nhận thanh toán, đặc biệt bằng Bảo mật 3D. Có điểm chung để hỗ trợ nhiều nguồn gốc iframe, API WebOTP hiện đang phân phối OTP được liên kết với các nguồn gốc lồng nhau bắt đầu từ Chrome 91.
Cách hoạt động của API WebOTP
Bản thân API WebOTP đã đủ đơn giản:
…
const otp = await navigator.credentials.get({
otp: { transport:['sms'] }
});
…
Tin nhắn SMS phải được định dạng một lần liên kết với máy chủ gốc mã.
Your OTP is: 123456.
@web-otp.glitch.me #12345
Lưu ý rằng ở dòng cuối cùng, mã này chứa nguồn gốc phải được liên kết đứng trước bằng
@
theo sau là OTP đứng sau #
.
Khi tin nhắn văn bản đến, một thanh thông tin sẽ bật lên và nhắc người dùng
xác minh số điện thoại của họ. Sau khi người dùng nhấp vào nút Verify
,
trình duyệt tự động chuyển tiếp OTP đến trang web và giải quyết
navigator.credentials.get()
. Sau đó, trang web có thể trích xuất OTP và hoàn tất
quá trình xác minh.
Tìm hiểu thông tin cơ bản về cách sử dụng WebOTP trong bài viết Xác minh số điện thoại trên web bằng API WebOTP.
Các trường hợp sử dụng iframe trên nhiều nguồn gốc
Việc nhập OTP vào một biểu mẫu trong iframe trên nhiều nguồn gốc thường thấy khi thanh toán trong trường hợp cụ thể. Một số tổ chức phát hành thẻ tín dụng yêu cầu bạn thực hiện thêm một bước xác minh để kiểm tra tính xác thực của người thanh toán. Tính năng này được gọi là Bảo mật 3D và có dạng thường được hiển thị trong iframe trên cùng một trang như thể đó là một phần của luồng thanh toán.
Ví dụ:
- Một người dùng truy cập vào
shop.example
để mua một đôi giày bằng thẻ tín dụng. - Sau khi nhập số thẻ tín dụng, nhà cung cấp dịch vụ thanh toán tích hợp sẽ hiển thị
từ
bank.example
trong iframe yêu cầu người dùng xác minh số điện thoại để thanh toán nhanh. bank.example
gửi một tin nhắn SMS có chứa OTP tới người dùng để họ có thể hãy nhập mã đó để xác minh danh tính của họ.
Cách sử dụng API WebOTP qua iframe trên nhiều nguồn gốc
Để sử dụng API WebOTP từ trong iframe trên nhiều nguồn gốc, bạn cần thực hiện hai những điều sau:
- Chú thích cả gốc khung trên cùng và gốc iframe trong văn bản SMS .
- Định cấu hình chính sách quyền để cho phép iframe trên nhiều nguồn gốc nhận OTP trực tiếp từ người dùng.
Bạn có thể tự mình thử bản minh hoạ tại https://web-otp-iframe-demo.stackblitz.io.
Chú thích nguồn gốc liên kết trong tin nhắn văn bản SMS
Khi API WebOTP được gọi từ bên trong iframe, tin nhắn văn bản SMS phải
bao gồm nguồn gốc khung hình trên cùng đứng trước @
và OTP đứng sau #
theo sau là gốc iframe đứng trước @
.
@shop.example #123456 @bank.exmple
Định cấu hình chính sách về quyền
Để sử dụng WebOTP trong iframe trên nhiều nguồn gốc, trình nhúng phải cấp quyền truy cập vào API thông qua chính sách về quyền thông tin xác thực otp để tránh tình trạng ngoài ý muốn hành vi. Nhìn chung, có hai cách để đạt được mục tiêu này:
- qua Tiêu đề HTTP:
Permissions-Policy: otp-credentials=(self "https://bank.example")
- qua thuộc tính
allow
của iframe:
<iframe src="https://bank.example/…" allow="otp-credentials"></iframe>
Xem ví dụ khác về cách chỉ định một chính sách quyền .
Chú ý
Các cấp độ lồng ghép
Hiện tại, Chrome chỉ hỗ trợ các lệnh gọi API WebOTP từ các iframe trên nhiều nguồn gốc có không quá một nguồn gốc riêng biệt trong chuỗi đối tượng cấp trên. Trong trong các trường hợp sau:
- a.com -> b.com
- a.com -> b.com -> b.com
- a.com -> a.com -> b.com
- a.com -> b.com -> c.com
sử dụng WebOTP trong b.com được hỗ trợ nhưng sử dụng WebOTP trong c.com thì không được hỗ trợ.
Lưu ý rằng trường hợp sau cũng không được hỗ trợ do thiếu nhu cầu và trải nghiệm người dùng phức tạp.
- a.com -> b.com -> a.com (gọi API WebOTP)
Khả năng tương tác
Mặc dù các công cụ trình duyệt không phải Chromium không triển khai API WebOTP,
Safari có cùng định dạng SMS
với sự hỗ trợ input[autocomplete="one-time-code"]
. Trong Safari, ngay khi
Tin nhắn SMS chứa định dạng mã một lần liên kết theo nguồn gốc sẽ được gửi đến cùng với tin nhắn SMS
máy chủ gốc, bàn phím đề xuất nhập OTP vào trường nhập.
Kể từ tháng 4 năm 2021, Safari hỗ trợ iframe với một định dạng SMS duy nhất sử dụng
%
.
Tuy nhiên, khi cuộc thảo luận về thông số kỹ thuật kết thúc sẽ đi với @
, chúng tôi hy vọng
việc triển khai định dạng SMS được hỗ trợ sẽ hội tụ.
Phản hồi
Ý kiến phản hồi của bạn sẽ giúp chúng tôi cải thiện API WebOTP. Vì vậy, hãy tiếp tục dùng thử và cho chúng tôi biết những gì bạn nghĩ.
Tài nguyên
- Xác minh số điện thoại trên web bằng OTP trên web API
- Các phương pháp hay nhất về biểu mẫu OTP qua SMS
- API WebOTP
- Mã một lần giới hạn theo máy chủ gốc được phân phối qua Tin nhắn SMS
Ảnh của rupixen.com trên Unsplash