Kích hoạt Đăng nhập Khách hàng bằng Multipass
Đăng nhập bằng Multipass được thiết kế cho các chủ cửa hàng có một trang web riêng và một cửa hàng SHOPLINE. Nó chuyển hướng khách hàng từ trang web đến cửa hàng SHOPLINE và đăng nhập cho họ một cách liền mạch bằng cùng một địa chỉ email mà họ đã sử dụng cho trang gốc, cùng với các tài khoản mới nếu không có tài khoản nào được liên kết hoặc tạo ra. Cùng với việc không cần đồng bộ hóa bất kỳ cơ sở dữ liệu khách hàng nào, ứng dụng này có thể mang lại sự tiện lợi lớn cho người dùng.
Bài viết này sẽ giải thích Multipass là gì, cách sử dụng nó và các tính năng bảo mật của nó.
Cách Sử Dụng Multipass
Kích Hoạt Đăng Nhập Bằng Multipass Trong SHOPLINE
-
Từ bảng điều khiển quản trị SHOPLINE của bạn, đi đến Cài đặt > Tài khoản khách hàng > Loại tài khoản khách hàng. Đảm bảo rằng bạn đã chọn Tài khoản khách hàng cổ điển. Đi đến phần Tài khoản khách hàng cổ điển > Đăng nhập bằng Multipass > Chỉnh sửa và nhấp vào Kích hoạt.
- Ngay khi được kích hoạt, bạn sẽ nhận được một ‘khóa mã hóa’. Khóa này là cần thiết để tạo ra một mã thông báo cho phép khách hàng đăng nhập vào cửa hàng của bạn. Vui lòng giữ các khóa này an toàn.
Mã Hóa Thông Tin Khách Hàng Sang Định Dạng JSON
Thông tin khách hàng được biểu diễn dưới dạng giá trị băm, phải chứa ít nhất địa chỉ email của khách hàng và dấu thời gian hiện tại (tham khảo ISO8601). Bạn cũng có thể bao gồm tên gọi của khách hàng, họ, hoặc nhiều địa chỉ giao hàng, hoặc bao gồm địa chỉ IP của phiên trình duyệt hiện tại của khách hàng.
Giá trị băm mẫu chứa tất cả các trường cần thiết:
{
“email”: “peter@shopline.com”,
“created_at”: “2013-04-11T15:16:23-04:00”,
}
Giá trị băm mẫu chứa các trường tùy chọn:
{
“email”: “peter@shopline.com”,
“created_at”: “2013-04-11T15:16:23-04:00”,
“first_name”: “Peter”,
“last_name”: “jason”,
“tag_string”: “canadian, premium”,
“identifier”: “peter123”,
“remote_ip”: “107.20.160.121”,
“return_to”: “http://yourstore.com/some_specific_site”,
“addresses”: [
{
“address1”: “123 Oak St”,
“city”: “Ottawa”,
“country”: “Canada”,
“first_name”: “Peter”,
“last_name”: “Jason”,
“phone”: “555-1212”,
“province”: “Ontario”,
“zip”: “123 ABC”,
“province_code”: “ON”,
“country_code”: “CA”,
“default”: true
}
]
}
Bạn có thể gán thẻ cho khách hàng của mình bằng cách đặt “tag_string” thành một danh sách các giá trị một từ được phân cách bằng dấu phẩy. Những thẻ này sẽ ghi đè lên bất kỳ thẻ nào bạn có thể đã liên kết với khách hàng này.
Nếu bạn muốn khách hàng của mình xem một trang cụ thể của cửa hàng, hãy sử dụng trường return_to.
|
Ghi chú: Trong SHOPLINE, Đăng nhập bằng Multipass sử dụng địa chỉ email làm định danh duy nhất cho khách hàng. Khi bạn đăng ký một khách hàng trong SHOPLINE, bạn phải đặt định danh duy nhất trong trường identifier trong các trường hợp sau:
Nếu địa chỉ email luôn duy nhất, trường identifier là không bắt buộc. Một địa chỉ email cụ thể chỉ có thể được sử dụng để đăng ký một tài khoản khách hàng SHOPLINE. Nếu nó được sử dụng để đăng ký một tài khoản khác (ngay cả với một “identifier” khác), sẽ xảy ra lỗi. |
Mã Hóa Dữ Liệu JSON Bằng AES
Để tạo ra một mã thông báo đăng nhập multipass hợp lệ, bạn cần khóa được cung cấp cho bạn trong quản trị SHOPLINE. Khóa này được sử dụng để tạo ra hai khóa mật mã — một cho mã hóa và một cho ký. Việc tạo ra khóa này được thực hiện thông qua việc sử dụng hàm băm SHA-256 (128 bit đầu tiên được sử dụng làm khóa mã hóa và 128 bit cuối cùng được sử dụng làm khóa ký).
Mã hóa cung cấp tính bảo mật vì nó đảm bảo rằng không ai có thể đọc dữ liệu khách hàng. Khóa mã hóa (128 bit, chế độ CBC và vector khởi tạo ngẫu nhiên) được tạo ra thông qua thuật toán AES.
Ký Dữ Liệu Đã Mã Hóa Bằng HMAC
Chữ ký (còn được gọi là mã xác thực thông điệp) cung cấp tính xác thực. Chúng đảm bảo rằng mã thông báo Multipass là xác thực và không bị can thiệp. Dữ liệu JSON đã mã hóa (thay vì dữ liệu JSON dạng văn bản) được ký bằng thuật toán HMAC của SHA-256.
Mã Hóa Dữ Liệu Nhị Phân Bằng Base64
Mã thông báo cho đăng nhập bằng Multipass bao gồm một vector khởi tạo 128 bit, ciphertext có độ dài biến đổi và chữ ký 256 bit (theo thứ tự như đã nêu ở đây). Nó được mã hóa bằng Base64 (với bảng chữ cái an toàn cho URL, như đã nêu trong RFC 4648).
Chuyển Hướng Khách Hàng Đến Cửa Hàng SHOPLINE Của Bạn
Khi bạn đã có mã thông báo, các yêu cầu HTTP GET sẽ được chuyển hướng đến cửa hàng SHOPLINE của bạn.
Yêu cầu HTTP GET: api/user/account/login/multipass/insert_token_here
Khi yêu cầu thành công (ví dụ, mã thông báo hợp lệ và chưa hết hạn), khách hàng sẽ đăng nhập vào cửa hàng SHOPLINE của bạn.
Mã thông báo chỉ hợp lệ trong một khoảng thời gian ngắn và chỉ có thể được sử dụng một lần, vì vậy bạn không nên tạo mã thông báo trước. Nếu không, các yêu cầu sẽ được chuyển hướng đến các trang web HTML. Bạn nên tạo một URL chuyển hướng và tạo mã thông báo khi cần thiết để các yêu cầu có thể được chuyển hướng đến cửa hàng của bạn tự động qua trình duyệt.
Trường Hợp Thực Hiện
Dưới đây là một trường hợp cơ bản về việc tạo mã thông báo trong Java:
public static void main(final String[] args) throws Exception {
final String createAt = ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT);
final Map<String, String> dataMap = new HashMap<>();
dataMap.put(“email”, “peter@shoplineapp.com”);
dataMap.put(“created_at”, createAt);
final String dataJson = “...”; //json string from dataMap;
final String secret = “...”;
final String token = generateToken(secret, dataJson);
log.info(“plaintext={}, token={}”, dataJson, token);
}public static String generateToken(final String secret, final String plaintext) throws Exception {
// SHA-256 hash
final MessageDigest messageDigest = MessageDigest.getInstance(“SHA-256”);
final byte[] encodedHash = messageDigest.digest(secret.getBytes(StandardCharsets.UTF_8));
final byte[] encryptedKey = new byte[16];
final byte[] signKey = new byte[16];
System.arraycopy(encodedHash, 0, encryptedKey, 0, 16);
System.arraycopy(encodedHash, 16, signKey, 0, 16);
// iv
final byte[] iv = new byte[16];
new SecureRandom().nextBytes(iv);
final SecretKeySpec encryptedKeySpec = new SecretKeySpec(encryptedKey, “AES”);
final Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”);
cipher.init(Cipher.ENCRYPT_MODE, encryptedKeySpec, new IvParameterSpec(iv));
// encrypt byte array
final byte[] encrypted = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
final byte[] ivEncryptedByte = new byte[iv.length + encrypted.length];
System.arraycopy(iv, 0, ivEncryptedByte, 0, iv.length);
System.arraycopy(encrypted, 0, ivEncryptedByte, iv.length, encrypted.length);
final Mac hmac = Mac.getInstance(“HmacSHA256”);
final SecretKeySpec signKeySpec = new SecretKeySpec(signKey, “HmacSHA256”);
hmac.init(signKeySpec);
// sign byte array, 256 bit
final byte[] signByte = hmac.doFinal(ivEncryptedByte);
final byte[] tokenBytes = new byte[ivEncryptedByte.length + signByte.length];
System.arraycopy(ivEncryptedByte, 0, tokenBytes, 0, ivEncryptedByte.length);
System.arraycopy(signByte, 0, tokenBytes, ivEncryptedByte.length, signByte.length);
String token = Base64.encodeBase64URLSafeString(tokenBytes);
token = token.replace(‘+’, ‘-’)
.replace(‘/’, ‘_’);
return token;
}
Các mối quan tâm về bảo mật
SHOPLINE khuyến khích bạn luôn thiết lập trường remote_ip trong giá trị băm dữ liệu khách hàng để chỉ những trình duyệt được chỉ định mới có thể sử dụng token. SHOPLINE cũng khuyến khích bạn sử dụng kết nối HTTPS an toàn để gửi token đến trình duyệt.
Bạn nên đảm bảo rằng việc đăng ký tài khoản mới trên trang web chính của bạn yêu cầu xác thực địa chỉ email đã sử dụng. Nếu không, bảo mật tài khoản của bạn có thể bị xâm phạm.
Câu hỏi thường gặp
Tôi có một cơ sở dữ liệu khách hàng lớn. Làm thế nào tôi có thể đồng bộ hóa nó với SHOPLINE để tôi có thể sử dụng đăng nhập với Multipass?
Bạn không cần phải đồng bộ hóa bất cứ điều gì. Khi bạn đăng nhập với Multipass để chuyển hướng yêu cầu của khách hàng, các tài khoản sẽ được tạo tự động cho khách hàng trong cửa hàng SHOPLINE của bạn (nếu chưa có tài khoản nào được tạo trước đó).
Một số khách hàng của tôi đã đặt hàng trên SHOPLINE. Làm thế nào tôi có thể cập nhật thông tin của những khách hàng này để họ có thể đăng nhập với Multipass?
Bạn có thể sử dụng các API khách hàng để thiết lập multipass_identifier cho khách hàng. Định danh này là bắt buộc cho tất cả các yêu cầu đăng nhập với Multipass cho các tài khoản khách hàng này.
Khóa của tôi đã bị rò rỉ. Tôi nên làm gì?
Nếu khóa của bạn bị rò rỉ, bạn có thể vô hiệu hóa nó trên trang Quản trị của cửa hàng bạn. Một khóa mới sẽ được tạo ra khi bạn kích hoạt lại. Điều này sẽ làm vô hiệu hóa tất cả các URL gốc. Bạn nên vô hiệu hóa khóa càng sớm càng tốt vì bất kỳ ai biết khóa có thể sử dụng nó để truy cập cửa hàng của bạn bằng tài khoản khách hàng của họ.
Tôi có thể sử dụng đăng nhập với Multipass giữa các cửa hàng SHOPLINE không?
Không, Multipass không thể được sử dụng để đăng nhập giữa nhiều cửa hàng Shopify mà không chuyển hướng đến một trang web bên ngoài.
Đăng nhập với Multipass có áp dụng cho các kênh bán buôn không?
Không, Đăng nhập với Multipass không thể được sử dụng cho các kênh bán buôn.
Trường remote_ip có hỗ trợ địa chỉ IPv6 không?
Không, chỉ có địa chỉ IPv4 được hỗ trợ. Nếu giá trị của remote_ip không khớp với địa chỉ IP được chỉ định trong giá trị băm dữ liệu khách hàng, đăng nhập với Multipass sẽ trả về lỗi: “Bạn không có quyền đăng nhập với Multipass.”
Bài viết này được dịch bằng AI và có thể chứa những sai sót. Để có thông tin chính xác nhất, vui lòng tham khảo phiên bản tiếng Anh gốc.