11

以下の仕様を使用して、Android で oauth_signature を作成する必要があります。OAuth 経由でリソースにアクセスするための署名を作成する際にボイラー プレート コードを処理するライブラリを探しています。

  1. 3 つのリクエスト要素の連結で構成される署名「ベース文字列」を作成します。

    • HTTP リクエスト メソッド。
    • リクエストの送信先のベース URL。この URL にはクエリ パラメータを含めないでください。Google サービスへの呼び出しに署名する場合、関連する手順については、OAuth 仕様のセクション 9.1.2 を参照してください。
    • リクエスト内のパラメーターの正規化された文字列 (oauth_signature パラメーターを除く)。これには、リクエスト ヘッダーまたは本文で送信されるパラメータと、リクエスト URL に追加されるクエリ パラメータが含まれます。文字列を正規化するには、辞書式のバイト値順序を使用してパラメーターを並べ替えます。この文字列の正規化の詳細については、OAuth 仕様のセクション 9.1.1 を参照してください。
  2. 次のいずれかのシーケンスを使用して oauth_signature を生成します。

    • アプリケーションが登録されていて、HMAC-SHA1 を使用している場合は、登録時に生成された OAuth の「コンシューマー シークレット」値を使用します。この値は、ドメインの登録ページに表示されます。
4

4 に答える 4

11

Chris の回答に関する Will の質問への回答として、組み込みの Android javax.crypto.mac を使用して、次のコード (標準 Java JCE プロバイダー API) を使用して hmacsha1 署名を生成できます。

Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
mac.init(secret);
byte[] digest = mac.doFinal(baseString.getBytes());
byte[] result=Base64.encode(digest, DEFAULT);

「秘密」はエンコードしたいテキストで、上記の「結果」はハッシュでエンコードされた署名です。

于 2011-12-31T23:44:32.927 に答える
1

OAuthについては何も知りませんが、javax.crypto.MacHMAC-SHA1値を生成するために使用できます(HmacSHA1アルゴリズム名として使用):

Mac hmac = Mac.getInstance("HmacSHA1");
于 2011-05-13T21:32:19.297 に答える
1

これが私が使用したコードです。値とキーをhmacSha1()に渡すだけです。hmacsha1文字列を返します。

private static String hmacSha1(String value, String key)
            throws UnsupportedEncodingException, NoSuchAlgorithmException,
            InvalidKeyException {
        String type = "HmacSHA1";
        SecretKeySpec secret = new SecretKeySpec(key.getBytes(), type);
        Mac mac = Mac.getInstance(type);
        mac.init(secret);
        byte[] bytes = mac.doFinal(value.getBytes());
        return bytesToHex(bytes);
    }

    private final static char[] hexArray = "0123456789abcdef".toCharArray();

    private static String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        int v;
        for (int j = 0; j < bytes.length; j++) {
            v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }
于 2015-09-06T08:58:14.440 に答える
0

Android OAuth クライアントにこのライブラリを使用しました: http://code.google.com/p/oauth-signpost/

于 2011-05-13T21:37:15.197 に答える