PAGES CONTENT

Get Started 开始 Mulai Mulakan Bắt đầu

Migrate to SHOPLINE 迁移到SHOPLINE Pindah ke SHOPLINE Berpindah ke SHOPLINE Đồng bộ dữ liệu về SHOPLINE

Your SHOPLINE account SHOPLINE账户 Akun SHOPLINE Anda Akaun SHOPLINE anda Tài khoản SHOPLINE của bạn

Orders 订单 Pesanan Pesanan Đơn hàng

Products 商品 Produk Produk Sản phẩm

Customer 客户 Pelanggan Pelanggan Khách hàng

Marketing 营销 Marketing Marketing Marketing

Apps 相关应用 Aplikasi Apps Ứng dụng

One page shop 一页商店 One page shop One page shop Cửa hàng một trang

Setting 设置 Pengaturan Tetapan Cài đặt

了解Multipass

1、什么是Multipass

2、如何使用Multipass

3、实施示例

4、安全考虑

5、常见问题

 

 

1、什么是Multipass

Multipass登录适用于拥有单独网站和Shopline商店的店主。它将用户从网站重定向到Shopline商店,并使用他们用于注册原始网站的相同电子邮件地址无缝登录。如果还没有该电子邮件地址的帐户,则会用该电子邮件地址创建一个新账户。无需同步任何客户数据库。

 

2、如何使用Multipass

2.1、在Shopline管理员中启用Multipass登录

登录您的商店管理员,转到“设置-客户登陆”,向下滚动到“通过multipass登录”部分.并确保您选择“客户可通过邮箱注册/登录”。

 

选择启用multipass。启用后,将与您共享一个密钥。您需要该密钥才能生成令牌来将客户登录您的Shopline商店。确保你的密钥保密。

 

2.2、使用JSON对客户信息进行编码

客户信息表示为哈希,该哈希必须至少包含客户的电子邮件地址和当前时间戳(ISO8601编码)。您还可以附上客户的名字、姓氏或多个送货地址。或者,您可以包含客户当前浏览器会话的IP地址,使令牌仅适用于来自此IP地址的请求。

包含所有必填字段的最小示例可能如下所示:

{

"email": "peter@shopline.com",

"created_at": "2013-04-11T15:16:23-04:00",

}

 

包含一些可选字段的示例可能如下所示:

{

"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

}

]

}


您可以通过将“tag_string”设置为逗号分隔的单字值列表来将标签归因于客户。这些标签将覆盖您可能已经归因于此客户的任何标签。

如果您希望您的用户看到您的Shopline商店的特定页面,您可以使用returnreturn_to字段。

备注

Shopline的multipass登录使用电子邮件地址作为商店客户的唯一标识符。在Shopline中注册客户时,在以下情况下,商家必须在“标识符”字段中设置唯一标识符:

  • 该网站使用其他标识符(如用户名)
  • 网站的两个不同用户可能会使用相同的电子邮件地址注册。如果电子邮件地址始终是唯一的,则不需要设置“标识符”字段。只有一个 Shopline 帐户可以使用特定的电子邮件地址。使用相同的电子邮件地址(即使使用不同的“标识符”)注册第二个客户将导致错误。

2.3、使用AES加密JSON数据

要生成有效的multipass登录令牌,您需要在Shopline管理员中为您提供秘钥。该秘钥用于导出两个加密密钥——一个用于加密,一个用于签名。此密钥派生是通过使用SHA-256哈希函数完成的(前128位用作加密密钥,最后128位用作签名密钥)。

加密提供了保密性。它确保没有人能读取客户数据。作为加密密码,我们使用AES算法(128位密钥长度、CBC操作模式、随机初始化向量)。

2.4、使用HMAC对加密数据进行签名

签名(也称为消息身份验证代码)提供真实性。它确保多通令牌是真实的,并且没有被篡改。我们使用带有SHA-256哈希函数的HMAC算法,并对第3步的加密JSON数据(而不是第2.2的明文JSON数据)进行签名。

2.5、Base64对二进制数据进行编码

multipass登录令牌现在由128位初始化向量、可变长度密文和256位签名(按此顺序)组成。此数据使用base64(URL安全变体,RFC 4648)进行编码。

2.6、将您的客户重定向到您的 Shopline商店

一旦您有了令牌,您应该会触发HTTP GET请求到您的Shopline商店。

HTTP GET 请求

api/user/account/login/multipass/insert_token_here

当请求成功时(例如,令牌有效且未过期),客户将登录您的Shopline商店。

multipass登录令牌仅在很短的时间内有效,每个令牌只能使用一次。出于这些原因,您不应该提前生成令牌,以便将其渲染到HTML站点中。您应该创建一个重定向URL,在需要时实时生成令牌,然后自动重定向浏览器。

 

3、实施示例

以下显示了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;

}

 

4、安全考虑

Shopline鼓励您始终在客户数据哈希中设置remote_ip字段,以便只有预期的浏览器才能使用令牌。我们还鼓励您使用安全的HTTPS连接向浏览器发送令牌。

您应该确保在主网站上注册新帐户需要验证所使用的电子邮件地址。否则,有人可以使用别人的电子邮件地址注册您的主网站,从而在您的Shopline商店中访问他的客户帐户。

 

5、常见问题

问: 我有一个巨大的客户数据库。如何将其与Shopline同步,以便我可以使用多通道登录?

答: 您不需要同步任何内容。一旦您使用multipass重定向客户,我们将自动在您的Shopline商店中为他们创建一个客户帐户(如果尚不存在).

 

问: 我的一些客户已经下了订单 Shopline。如何更新这些客户,以便他们可以通过多通行证登录?

答: 您可以使客户API为客户设置multipass_identifier。您需要将标识符用于这些客户帐户的所有多行证请求.

 

问: 我的秘钥被泄露了。我现在该怎么办?

答: 如果您的秘钥泄露,可以在您的商店管理员中禁用它,再重新启用将会生成一个新的秘钥。这将使所有旧URL无效。您应该尽快这样做,因为每个知道秘钥的人都可能访问每个客户帐户!

 

问:  我可以在多个Shopline商店之间使用Multipass登录吗?

答:  不,Multipass不能用于在多个Shopline商店之间登录,而无需重定向到外部网站。

 

问: Multipass登录是否适用于批发渠道?

答: 不,Multipass不能与批发渠道一起使用。

 

问: remote_ip字段是否支持IPv6地址?

答: 不,仅支持IPv4地址。如果remote_ip与客户数据哈希中指定的IP不匹配,Multipass返回错误“您无权使用Multipass登录”。

 

* 如有SHOPLINE功能使用感受或需求建议,快点击【功能反馈】告诉我们吧!

 

 

评论