Access Token和Refresh Token的长度与其中编码的信息有关,目前来讲Access Token和Refresh Token的长度不会超过1024字符。
单个App在一小时内最多允许10000次调用,超过限制将获取Token失败。
问题描述
集成Account Kit,获取ID Token,调用服务侧的/oauth2/v3/tokeninfo接口后,发现不能在响应体中获取响应字段的Email信息。
得到的响应如下:
- {
- "at_hash": "XXXXXX",
- "aud": "XXXXXX",
- "sub": "XXXXXX",
- "azp": "XXXXXX",
- "kid": "XXXXXX",
- "iss": "https://accounts.huawei.com",
- "typ": "JWT",
- "exp": 1579682457,
- "display_name": "136******53",
- "iat": XXXXXX,
- "alg": "RS256"
- }
接口指导中的响应如下所示:
- {
- "iss":"String",
- "sub":"String",
- "aud":"String",
- "exp":"Long",
- "iat":"Long",
- "nonce":"String",
- "at_hash":"String",
- "azp":"String",
- "email_verified":"Boolean",
- "email":"String",
- "picture":"String",
- "name":"String",
- "locale":"String",
- "family_name":"String",
- "given_name":"String",
- "display_name":"String"
- }
可能原因
在获取ID Token前,未请求华为帐号用户授权应用获取Email地址。
处理步骤
在端侧的代码中提前添加请求华为帐号用户授权应用获取Email地址的操作。
3.0版本的授权请求接口为requestEmail();4.0版本授权请求接口为setEmail()。
HMS Core SDK 3.0版本
HuaweiIdSignInOptions mSignInOptions = new HuaweiIdSignInOptions.Builder(HuaweiIdSignInOptions.DEFAULT_SIGN_IN).requestServerAuthCode().requestIdToken("").requestEmail().build();
HMS Core SDK 4.0版本
HuaweiIdAuthParams authParams = new HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setIdToken().setEmail().createParams();
说明
请求华为帐号用户授权应用获取相应信息的详情请参见HuaweiIdAuthParamsHelper的setEmail。
解析ID Token不需要私钥,校验ID Token也不需要私钥。
ID Token能正常演示的最小版本为Android 9,请排查测试手机上的版本是否符合要求。
Email信息并不是必填字段,请登录帐号中心确认用户的帐号信息中是否包含Email信息。
验证ID Token有效性中的公钥每天更新一次,应用服务器可以缓存公钥的值。若公钥失效,旧公钥不可用,请在certs网站上获取最新的公钥,并更新应用服务器缓存的旧公钥。
不可以,由于需要隐私保护,接入华为帐号后只能获取openId。
openId:当前非固定长度,最大允许长度256,需进行三倍冗余考虑,不推荐进行长度限制。
unionId:当前固定长度46,最大允许长度64,需进行三倍冗余考虑,不推荐进行长度限制。
说明
unionId和openId的区别在于,如果开发者帐号下管理了多个应用,针对同一个华为帐号,不同的应用返回的openId值不同,但返回的unionId相同。如果开发者需要在不同应用中共享同一个华为帐号的用户信息,可以使用unionId作为用户标识。
Access Token的有效时长是1个小时,Refresh Token的有效时长是180天。
PS:这是根据官方目前的FAQ整理,如有变动,大家以官网发布的为准哦!
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh