# 客户端获取的OpenID、UnionID和服务端获取的OpenID、UnionID有什么区别

#### 问题现象

应用使用自定义按钮实现华为账号登录，根据官网业务流程介绍：UnionID、OpenID是通过在服务端解析Access Token获取后再传递给客户端。但是客户端调用AuthenticationController对象的executeRequest方法执行登录请求后获取Authorization Code时也可以获取UnionID、OpenID。这两处获取的UnionID、OpenID有什么区别？

#### 背景知识

UnionID是华为账号用户同一开发者账号下的唯一标识，开发者拥有多个应用获取同一个华为账号的UnionID是同一个；OpenID是华为账号用户在应用/元服务的唯一标识，同一个华为账号在不同应用获取的OpenID不同。OpenID和UnionID的格式根据创建时间有所不同。

#### 解决方案

1.  客户端通过executeRequest方法获取的UnionID、OpenID和服务端使用Access Token调用解析凭证接口获取的UnionID、OpenID是分别相同的。
2.  使用场景不同：
    *   客户端获取UnionID、OpenID推荐应用没有服务端时使用。由客户端侧完成UnionID、OpenID的持久化和失效。失效后需要重新调用AuthenticationController对象的executeRequest重新获取。
    *   服务端获取UnionID、OpenID推荐应用有服务端时使用。UnionID、OpenID由服务端统一维护。可以复用Access Token的有效性，维护登录状态更简单。