2016-06-17 4 views
1

私が説明した応答を取得するには、このlinkを使用しようとしています:クイックbloxの - 署名生成問題

{ 
    "session": { 
    "application_id": 2, 
    "created_at": "2012-04-03T07:34:48Z", 
    "device_id": null, 
    "id": 743, 
    "nonce": 1308205278, 
    "token": "0e7bc95d85c0eb2bf052be3d29d3df523081e87f", 
    "ts": 1333438438, 
    "updated_at": "2012-04-03T07:34:48Z", 
    "user_id": null 
    } 
} 

しかし、今では、アプリケーションが見つからないと言う:

<?xml version="1.0" encoding="UTF-8"?> 
<errors> 
    <error>No application found</error> 
</errors> 

は、テストに先に行くことはできません別の要求。これは私がカール要求を取得するために使用するシェルスクリプトです:

timestamp=`date +%s` 

body="application_id=HIDDENAPPLICATIONIDHERE&auth_key=HIDDENAUTHKEYHERE&nonce=2342546&timestamp=$timestamp" 

signature=`echo -n $body | openssl sha -hmac HIDDENSECRETHERE` 

body=$body"&signature="$signature 

#echo $body 
#echo $signature 

#exit 0 

curl -X POST \ 
-H "QuickBlox-REST-API-Version: 0.1.0" \ 
-d $body \ 
https://api.quickblox.com/session.xml 

だから、間違った道に、この多分、私が作成したシェルスクリプトをregrdingいくつかの情報:身体の

HMAC-SHA機能をキーauth_secretを使用してリクエストの リクエストボディは は「&」記号で区切られ、文字列配列「パラメータ=値」の増加によって( 記号としてではなく、バイトで、アルファベット順にソート)ソートされたように形成されています。 ユーザー[ID]として渡されたパラメータの場合= 123は、ユーザのちょうどそのような行[ID]を使用している= 123

はまた、私は署名を生成し、セッションを取得する方法Swift projectを整形処理、まだ持っていましたアプリケーションのない同じエラーが見つかりませんでした。

任意の勧告?おかげ

答えて

0

アプリケーションIDパラメータを確認してくださいサーバーの復帰理由:署名を生成たとえば

<?xml version="1.0" encoding="UTF-8"?> 
<errors> 
    <error>No application found</error> 
</errors> 

(ジャワ):

Random random = new Random(); 

    String nonce = Integer.toString(random.nextInt()); 
    long time = System.currentTimeMillis()/1000; 
    String timestamp = Long.toString(time); 
    String signature; 

    String str = "application_id=" + applicationId + "&" + "auth_key=" + authKey + "&" + "nonce=" 
      + nonce + "&" + "timestamp=" + timestamp + "&" + "user[login]=" + adminLogin + "&" + "user[password]=" 
      + adminPassword; 

    signature = UtilsMethods.calculateHMAC_SHA(str, authSecret); 

calculateHMAC_SHA:

private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1"; 

    public static String calculateHMAC_SHA(String data, String key) throws SignatureException { 
     String result = null; 
     try { 

      // get an hmac_sha1 key from the raw key bytes 
      SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM); 

      // get an hmac_sha1 Mac instance and initialize with the signing key 
      Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); 
      mac.init(signingKey); 

      byte[] digest = mac.doFinal(data.getBytes()); 

      StringBuilder sb = new StringBuilder(digest.length * 2); 
      String s; 
      for (byte b : digest) { 
       s = Integer.toHexString(0xFF & b); 
       if (s.length() == 1) { 
        sb.append('0'); 
       } 

       sb.append(s); 
      } 

      result = sb.toString(); 

     } catch (Exception e) { 
      throw new SignatureException("Failed to generate HMAC : " + e.getMessage()); 
     } 

     return result; 
    } 
私がチェックします
+0

感謝アンドレイとあなたに教えてください、本当にあなたの助け人に感謝! –

+0

@MatrosovAlexanderは、あなたを歓迎します! –

+0

ねえアンドレイは、私はあなたの推薦を使用することを試みたと私は同じことを実行しようとしましたが、それでも「いいえアプリケーションが見つからない」GET https://github.com/matrosovDev/QuickBloxApiTest/tree/master/QuickBloxTestスウィフトプロジェクトを構築し、私はアプリのIDを再チェックして、私はそれがウェブサイトのボタンを使ってコピーしたので、正しいことを完全に確信しています。私の例では、Consts.swiftに空のフィールドを残します。私は私のものを共有したくありません。しかし、あなたはそれを確認するためにあなたのアプリを使用することができます。もう一度お世話になりました! Consts.applicationId、 "AUTH_KEY":Consts.authKey、 "タイムスタンプ":タイムスタンプ、 "ナンス":ナンス、 "署名":署名、 "ユーザー[ログイン]":Consts –