0

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 ) には例がありません。そのため、フォローするのが難しくなります。

4

1 に答える 1

0

2 つの異なるプラットフォーム (php と C#) で同じ例を試してみましたが、この例は間違っているようです (結局はドラフトです)。正しい出力は実際には " 6T3zZzy2Emppni6bzL7kdRxUWL4=" です。

他の人が同じ問題を見ました

于 2013-03-28T15:32:49.863 に答える