前言
用户开发的微服务要想注册到华为云CSE的服务中心,就需要用到AK/SK认证。由于CSEJavaSDK提供了较多的配置方式,有时候容易出现错配和漏配的情况,本文从CSEJavaSDK读取AK/SK的关键代码入手进行分析,希望能够给大家提供一点AK/SK认证失败时的定位思路。(本文基于CSEJavaSDK-2.3.30进行说明)
代码逻辑分析
首先需要说明的是,AK/SK也是一个配置项,因此它可以配置在microservice.yaml文件里,可以通过-D设置系统属性来指定,也可以通过环境变量来指定(Windows的环境变量貌似可以带点号.,因此你可以直接在环境变量中指定cse.credentials.accessKey=ak;而Linux的环境变量不能带点,所以不能这么做)。另一方面来说,AK/SK又是一个比较特殊的配置项,因此CSEJavaSDK又提供了一个加密存储的配置方式。无论AK/SK的来源是哪里,最终CSEJavaSDK都是在AKSKManager中完成AK/SK的读取逻辑的。
public static Credentials getCredential() throws Exception {
// 读取AK/SK
AKSKOption option = AKSKOption.readAKSK();
// 中间读写缓存等等逻辑忽略……
// 根据cse.credentials.akskCustomCipher配置获取cipher,对AK/SK进行解密
AKSKCipher cipher = (AKSKCipher)CIPHERS.get(option.getAkskCustomCipher());
// 检查逻辑忽略...
char[] ak = cipher.decode(TYPE.AK, option.getAccessKey().toCharArray());
char[] sk = cipher.decode(TYPE.SK, option.getSecretKey().toCharArray());
String project = option.getProject();
if (project == null || project.isEmpty()) {
// 如果用户没有配置cse.credentials.project,就尝试从配置的服务中心地址进行解析&