1

filepicker.io (セキュリティを有効にして) を Java アプリケーションに統合しようとしています。Java コードでは、base64 エンコーディングに次のコードを使用して、ファイルピッカー統合用の JavaScript を生成しています。

import org.apache.commons.codec.binary.Base64;
import org.codehaus.jackson.map.ObjectMapper;

private Pair<String, String> encodeAndSignPolicy(Policy policy) {
   byte[] jsonPolicy = JSON_MAPPER.writeValueAsBytes(policy);
   String encodedPolicy = base64UrlEncode(jsonPolicy);

   byte[] signature = m_mac.doFinal(encodedPolicy.getBytes(UTF8));
   String encodedSignature = base64UrlEncode(signature);

   return Pair.create(encodedPolicy, encodedSignature);
}

private String base64UrlEncode(byte[] input) {
   Base64 base64 = new Base64(false);
   byte[] encodedBytes = base64.encode(input);
   return new String(encodedBytes).replace('+', '-').replace('/', '_').replace("\r\n", "");
}

場合によってはこれでうまくいきますが、安定していません。さまざまな API (apache commons と jackson) を含む、URL セーフな base64 エンコーディングのさまざまなバリエーションを試しましたが、生成される署名は毎回不安定です。

たとえば、次の 2 つのポリシーが生成されます。

working:
policy: {"call":"pick","expiry":1361202256856} 
base64 policy: eyJjYWxsIjoicGljayIsImV4cGlyeSI6MTM2MTIwMjI1Njg1Nn0= 
base64 signature: 0vQdw1rcfoAYN0sv71OcGArHAF2jozLaaMGR2DZ5DbA= 

not working:
Policy: {"call":"pick","expiry":1361202299638} 
base64 policy: eyJjYWxsIjoicGljayIsImV4cGlyeSI6MTM2MTIwMjI5OTYzOH0= 
base64 signature: wzgaIRume9OZ5Q6TKx-c5LaEabmUmENZk0Dwvm0Y01Y= 

および生成された JavaScript:

filepicker.pickMultiple({
        container: 'modal',
        openTo: 'GOOGLE_DRIVE',
        services:['BOX', 'COMPUTER', 'DROPBOX', 'EVERNOTE', 'FACEBOOK', 'FLICKR', 'FTP', 'GITHUB', 'GOOGLE_DRIVE', 'PICASA', 'WEBDAV', 'GMAIL', 'IMAGE_SEARCH', 'INSTAGRAM', 'URL', 'VIDEO', 'WEBCAM'],
        policy: 'eyJjYWxsIjoicGljayIsImV4cGlyeSI6MTM2MTIwMjI5OTYzOH0=',
        signature: 'wzgaIRume9OZ5Q6TKx-c5LaEabmUmENZk0Dwvm0Y01Y=',
    },
    function(FPFiles){
        $('#filePickerInput7c').val(JSON.stringify(FPFiles));
        $('#filePickerInput7c').change();
    },
    function(FPError){
        console.log(FPError.toString());
    }
); 

署名に「-」または「_」が含まれるたびに、無効であることが判明したようです。java で filepicker.io の有効な署名 (およびポリシー) を生成するにはどうすればよいですか?

4

0 に答える 0