认证服务调用验证token接口时报错“Netty rest client failed to write request to server ”的解决方案

问题背景

AppGallery Connect(简称AGC)提供的认证服务包含了多种形式的帐号,基本涵盖了世界上最主流的登录系统。除了客户端侧各种不同的登录方式认证外,认证服务还提供了服务器侧的SDK,用于用户管理,验证登录等场景。例如为了保障登录系统的安全,在认证服务认证成功后开发者会收到认证服务下发的一个access token。开发者可以拿着这个token去服务器调用服务器侧Server SDK的接口来验证token的正确性以保障登录的安全。最近我就在调用验证token的接口的时候遇到了报错:Netty rest client failed to write request to server.

这种情况我们该如何解决呢?

解决方法

当我们第一次看到此错误的时候,很容易就会想到是否为网络问题,所以我检查了当前环境的网络配置一级代理情况,发现并没有设置代理,网络也可以正常访问。

然后我又想是否是认证服务的ip不通,所以我找到了server sdk请求的域名,connect-api.cloud.huawei.com。尝试去ping通这个域名。发现域名也是可以ping通的。面对这个现象就有点束手无策了。由于报错发生在sdk内部,所以只能够求助华为的技术专家了。华为的技术专家在看到这个问题的时候开始也是有些没有头绪,但是听说我们的服务器在海外的时候就突然有了想法。原来认证服务的server sdk也是区分站点的。由于我们的项目默认数据存储地为中国,导致如果不在请求之前特别设置数据存储地,所有请求都会发送到中国站点的服务器上。这样跨站点访问很可能就会导致网络问题。于是,我在请求之前设置数据存储地为SG(新加坡站点),netty的问题就解决了。设置的代码如下:

String clientName = "SingaporeSite";
String region= "SG";
AGCClient.initialize(clientName, region);

Initialize方法为server sdk初始化的方法,clientName是我们自己为当前这个实例起的名字,后续便于管理。而region就是我们需要设置的请求服务地了。我们这里设置为新加坡,这样后续对当前实例操作的所有的网络请求就会发送到新加坡站点了。

参考文档:

Server sdk使用入门指导:

https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started-server-0000001058092593#section03951051183918

欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/4478396/blog/5549937