HarmonyOS账号登录的OpenID和UnionID使用说明
================================

#### 问题现象

**场景一**：华为账号登录流程中服务端需要存什么凭据，使用什么字段作为唯一标识？

**场景二**：HarmonyOS 4.3及以下版本授权登录使用的是OpenID作为唯一标识，HarmonyOS 5及以上版本设备下获取到的OpenID和之前的不一样。

**场景三**：HarmonyOS 4.3及以下版本和HarmonyOS 5及以上版本获取的OpenID不相同，UnionID相同，如何通过用户OpenID获取UnionID？

**场景四**：用户更换绑定华为账号的手机号码，华为账号一键登录返回的UnionID是否会变？

#### 解决方案

**场景一：**

华为账号登录会向服务端返回UnionID 、OpenID 、authorization Code 、ID token，建议都存储，其中UnionID、OpenID是唯一标识。参考[OpenID和UnionID的格式说明](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/account-faq-9)。

*   开发者账号下管理了多个应用时，针对同一个华为账号，不同的应用返回的OpenID值不同，但返回的UnionID相同，所以建议使用OpenID来作为唯一ID。
*   如果开发者账号下管理了多个应用，并且这些应用需要共享同一个华为账号的用户信息，可以使用UnionID作为用户标识。

**场景二：**

1.  HarmonyOS 4.3及以下版本和HarmonyOS 5及以上版本获取的OpenID确实不相同，首先用户OpenID的生成规则是：由用户账号和应用ID加密生成的；在这个基础上HarmonyOS 4.3及以下版本和HarmonyOS 5及以上版本的应用ID是不相同的，所以获取的OpenID是不同的。
2.  推荐使用UnionID，其生成规则是：由用户账号和应用开发者账号签名而成，如果开发者账号下管理了多个应用，并且这些应用需要共享同一个华为账号的用户信息，可以使用UnionID作为用户标识。

**场景三：**

可调用REST API接口[通过OpenID获取UnionID](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/account-api-get-unionid)。

**场景四：**

用户更换绑定华为账号的手机号码，华为账号一键登录返回的UnionID不会变，可以作为用户的唯一标识。