App Engine에서 Google Cloud Storage로 작업 중이며 POST 양식을 사용하여 GCS에 파일을 업로드하려고합니다. 내가 가지고있는 문제는 정책 문서에 서명하는 데 필요한 단계입니다. API 콘솔이 준 client_secrets.json
에서 문자열 인 client_secret을 쉽게 가져올 수 있습니다. 그러나 서명을 만들려면 해당 문자열을 PrivateKey
개체로 변환해야합니다. 여기처럼 내 코드를 보이는 내용은 다음과 같습니다으로는 위에서 언급 한clientsecret을 개인 키로 변환
//create the policy document and encode it
String policyDocument = ... //omitted for brevity
String encodedPolicy = Base64.encodeString(policyDocument);
//sign using SHA256 with RSA
String secretKey = ... //I fetch this from client_secrets.json
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initSign(secretKey); //THIS IS THE PROBLEM!
sig.update(encodedPolicy.getBytes("UTF-8"));
String signature = new String(Base64.encode(sig.sign()));
//put the values in the request attributes so we can fetch them from a JSP
req.setAttribute("policy", encodedPolicy);
req.setAttribute("signature", signature);
, 내 문제는 라인
sig.initSign(secretKey); //THIS IS THE PROBLEM!
secretKey
에있는 것은 String입니다. Signature.initSign()
은 PrivateKey
또는 그 자손 오브젝트 중 하나를 필요로합니다. client_secrets.json
의 문자열을 Signature.initSign
을 전달할 수있는 PrivateKey (또는 파생 된) 객체로 변환하려면 어떻게해야합니까?
도움을 주시면 감사하겠습니다. 감사합니다.
좋아, 여기가 바로 지금입니다. 나는 아래의 제안을 시도하고 모든 설명서는 이 아닌 서비스 계정으로 다운로드 한 client_secrets.json 파일에서 client_secret을 사용하도록 촉구합니다. 게다가, 저는 서비스 계정이 아닌 사용자의 업로드 예제를 만들려고합니다.
나는 다른 페이지에 다음 코드 발견 :public static String signPolicyDocument(String policyDocument, String secret) {
try {
Mac mac = Mac.getInstance("HmacSHA256");
byte[] secretBytes = secret.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(secretBytes, "HmacSHA256");
mac.init(signingKey);
byte[] signedSecretBytes = mac.doFinal(policyDocument.getBytes());
return new String(Base64.encode(signedSecretBytes));
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
을 그리고 난 결과 양식을 제출 때까지 ... 과정을 통해 나에게 모든 방법을 가져옵니다. 그런 다음 다음과 같은 응답을 받았습니다.
The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
어떤 서명 방법이 필요한가요?
App Engine을 사용하고 있습니까? 질문은 그것을 언급하지는 않지만 그것으로 분류됩니다. –
저는 AppEngine에서 일하고 있습니다. 나는 그 사실을 반영하기 위해 영업 이익을 편집했다. –