在我们的应用程序中,我们将密码作为标头的一部分发送到我们的auth服务。但是,我们遇到了这样一种情况,用户正在使用非ASCII字符作为其密码的一部分,我发现HTTP不支持非ASCII字符。
有什么方法可以解决这个问题?
答案 0 :(得分:1)
您需要以ASCII兼容格式对其进行编码。
Base 64是这样的编码。
这是他们使用HTTP Basic Authentication使用Base 64编码的示例。
授权字段的构造如下:
- 用户名和密码用单个冒号(:)组合。这意味着用户名本身不能包含冒号。
- 结果字符串被编码为一个八位字节序列。只要与US-ASCII兼容,默认情况下未指定用于此编码的字符集,但是服务器可以通过发送charset参数来建议使用UTF-8。
- 结果字符串使用Base64的变体进行编码。
- 然后将授权方法和空格(例如“ Basic”)添加到编码字符串中。
例如,如果浏览器使用
Aladdin
作为用户名,使用OpenSesame
作为密码,则该字段的值为Aladdin:OpenSesame
或QWxhZGRpbjpPcGVuU2VzYW1l
的base64编码。 。然后,授权标头将显示为:Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l
因此,假设您的密码为ǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ
,则无法使用ASCII字符集来表示。
这里有一些伪代码向您展示如何实现
var password = 'ǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ'
var base64EncodedPassword = base64Encode(password)
var httpHeader = new HttpHeader('Password', base64EncodedPassword)
这将导致以下标题。仅使用ASCII字符表示
Password: x4HHgseDx4THhceGx4fHiMeJx4rHi8eMx43HjsePx5DHkceSx5PHlMeVx5bHl8eYx5nHmsebx5zHnceex58=