【发布时间】:2020-12-04 12:37:22
【问题描述】:
我有一个希望与之交换数据的供应商。他们希望我获取他们提供给我的用户名和密码,并将其用于获取请求的 Authorization 标头。
现在是我肮脏的小秘密。我以前从未创建过授权标头。
所以我做了一堆研究并找出以下代码。
public static final String AUTH_SEPARATOR = ":";
private static final String AUTH_TYPE = "Basic ";
public static final String HEADER_AUTHORIZATION = "Authorization";
public static void addAuthHeader(Map<String, String> headers, String user, String password) {
String secretKey = user
+ AUTH_SEPARATOR
+ password;
byte[] tokenBytes = secretKey.getBytes();
String token64 = Base64.getEncoder().encodeToString(tokenBytes);
String auth = AUTH_TYPE + token64;
headers.put(HEADER_AUTHORIZATION, auth);
}
我运行它,但我没有得到任何回应。嗯。所以我去向他们提出支持请求,我想创建一个示例,所以我打开邮递员并使用他们为邮递员提供的 API。首先,我为我正在复制的 API 运行一个,它可以工作。嗯。
然后我修改该 API 并使用我的用户名和密码而不是示例中包含的用户名和密码,它工作正常。呲牙咧嘴!
所以我敲了一下,发现 postman 创建的 auth 中的 Base64 字符串与我创建的略有不同。
所以,回到研究中,我发现的所有代码看起来都很像我的,尽管由于版本差异我不得不对其进行一些更新。字符串仍然不同,现在我正在寻求帮助。肯定有人解决了这个问题。
来自邮递员的字符串 "Basic THVKZ...FvTg==" 上面代码中的字符串 "Basic THVKZ...FvTiA="
我怎么做错了,结果只有三个字节的差异?
【问题讨论】:
-
可能来自编码,特别是如果您的密码中有特殊字符。您是否尝试在 getBytes(encoding) 方法中指定编码?
标签: java http-headers base64