Android で MAC アクセス認証を使用して http ヘッダーに署名しようとしています。ここにある IETF ドラフト #2 を使用しています。
https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac-02 (1)
ドラフトの例を使用すると、変数は次のとおりです。
MAC key identifier: h480djs93hd8
MAC key: 489dks293j39
MAC algorithm: hmac-sha-1
Timestamp: 1336363200
Nonce: dj83hs9s
以下は正規化された文字列です。
1336363200\n
dj83hs9s\n
GET\n
/resource/1?b=1&a=2\n
example.com\n
80\n
\n
次の方法を使用して、Mac ヘッダーをエンコードします。
private String calculateMAC(final String macAlgorithm, final String normalizedString, final String keyString) {
try {
final SecretKeySpec keySpec = new SecretKeySpec((keyString).getBytes("UTF-8"), macAlgorithm);
final Mac mac = Mac.getInstance(macAlgorithm);
mac.init(keySpec);
return Base64.encodeToString(mac.doFinal(normalizedString.getBytes("UTF-8")), Base64.NO_WRAP);
} catch (final Exception e) {
Log.e("Error", e.toString());
return null;
}
}
私が抱えている問題は、結果の MAC が " bhCQXTVyfj5cmA9uKkPFx1zeOXM=
" であるとドラフトに記載されていることです。しかし、私が何をしようとしても(異なるエンコーディング、異なるライブラリなど)、常に「6T3zZzy2Emppni6bzL7kdRxUWL4=
」があります。どうして??
(1) 最新のドラフト ( https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac-03 ) には例がありません。そのため、フォローするのが難しくなります。