2016-10-02 7 views
0

전자 메일 감사 API를 사용하여 회사의 전자 메일을 모니터링하고 있습니다. 안타깝게도 여기 https://developers.google.com/admin-sdk/email-audit/auth 안내에 따라 공개 키를 업로드 할 수 없습니다. 이 예에서Node.js 및 HTTPS for Email 감사 API를 사용하는 데 너무 긴 매개 변수

, 나는 구글 페이지에 주어진 공개 키 (base64로 인코딩 된)가 사용됩니다 : 여기

LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQpWZXJzaW9uOiBHbn 
VQRyB2MS40LjEwIChHTlUvTGludXgpDQoNCm1RRU5CRXJXYUQ0QkNBQ3QybmdmczYv 

K1FPR1lieE5iYzNnTG5YSHRxcDdOVFRYTlc0U0pvKy9BMW9VWm9HeEENClF4NnpGWG 
hRLzhNWFc2Nis4U1RTMVlxTkpPQVJGdGpiSUtQd2pyZGN1a2RQellWS0dacmUwUmF4 
Q25NeUNWKzYNCkY0WU5RRDFVZWdIVHUyd0NHUjF1aVlPZkx4VWE3L2RvNnMzMVdSVE 
g4dmJ0aVBZOS82b2JFSXhEakR6S0lxWU8NCnJ2UkRXcUFMQllrbE9rSjNIYmdmeWw0 
MkVzbkxpQWhTK2RNczJQQ0RpMlgwWkpDUFo4ZVRqTHNkQXRxVlpKK1INCldDMUozVU 
R1RmZtY3BzRFlSdFVMOXc2WU10bGFwQys5bW1KM0FCRUJBQUcwVjBSaGMyaGxjaUJV 
WlhOMElDaFUNCmRHVnlNa0JrWVhOb1pYSXRhSGxrTFhSbGMzUXVZMjl0UG9rQk9BUV 
RBUUlBSWdVQ1N0Wm9QZ0liRFFZTENRZ0gNCmsxOVFja1Rwd0Jkc2tFWXVtRnZtV3Zl 
NVVYMlNWVjdmek9DMG5adGdGeHRaR2xKaEdtanNBM3J4RlRsYitJcmENCldaYXlYQ1 
dZaUN6ZDdtOXo1L0t5R0QyR0ZUSy85NG1kbTI1TjZHWGgvYjM1cElGWlhCSS9yWmpy 
WXJoWVJCRnUNCkd0ekdGSXc5QUFuRnlVekVVVVZmUFdVdEJlNXlITVc1NEM2MG5Iaz 
V4WUlhNnFGaGlMcDRQWXFaQ3JZWDFpSXMNCmZSUk9GQT09DQo9U1RIcg0KLS0tLS1F 
TkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQ== 

은 내 코드입니다 :

var params = 
    "<atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'>"+ 
     "<apps:property name='publicKey' value='"+key+"'/>"+ 
    "</atom:entry>"; 


// An object of options to indicate where to post to 
var post_options = { 
    host: 'apps-apis.google.com', 
    path: '/a/feeds/compliance/audit/publickey/' + encodeURIComponent(domain), 
    method: 'POST', 
    headers: { 
     'Authorization': 'OAuth ' + token, 
     'Content-Type': 'application/atom+xml;charset=utf-8', 
    } 
}; 

// Set up the request 
var post_req = https.request(post_options, function(res) { 
    res.setEncoding('utf8'); 

    res.on('data', function (chunk) { 
     console.log("REPONSE"); 
     console.log("-------"); 
     console.log(chunk); 
    }); 
}); 

// post the data 
post_req.write(params); 
post_req.end(); 

그리고 그 결과로 배수로 올


<?xml version="1.0" encoding="UTF-8"?> 
<AppsForYourDomainErrors> 
    <error errorCode="1411" invalidInput="LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQpWZXJzaW9uOiBHbn VQRyB2MS40LjEwIChHTlUvTGludXgpDQoNCm1RRU5CRXJXYUQ0QkNBQ3QybmdmczYv K1FPR1lieE5iYzNnTG5YSHRxcDdOVFRYTlc0U0pvKy9BMW9VWm9HeEENClF4NnpGWG hRLzhNWFc2Nis4U1RTMVlxTkpPQVJGdGpiSUtQd2pyZGN1a2RQellWS0dacmUwUmF4 Q25NeUNWKzYNCkY0WU5RRDFVZWdIVHUyd0NHUjF1aVlPZkx4VWE3L2RvNnMzMVdSVE g4dmJ0aVBZOS82b2JFSXhEakR6S0lxWU8NCnJ2UkRXcUFMQllrbE9rSjNIYmdmeWw0 MkVzbkxpQWhTK2RNczJQQ0RpMlgwWkpDUFo4ZVRqTHNkQXRxVlpKK1INCldDMUozVU R1RmZtY3BzRFlSdFVMOXc2WU10bGFwQys5bW1KM0FCRUJBQUcwVjBSaGMyaGxjaUJV WlhOMElDaFUNCmRHVnlNa0JrWVhOb1pYSXRhSGxrTFhSbGMzUXVZMjl0UG9rQk9BUV RBUUlBSWdVQ1N0Wm9QZ0liRFFZTENRZ0gNCmsxOVFja1Rwd0Jkc2tFWXVtRnZtV3Zl NVVYMlNWVjdmek9DMG5adGdGeHRaR2xKaEdtanNBM3J4RlRsYitJcmENCldaYXlYQ1 dZaUN6ZDdtOXo1L0t5R0QyR0ZUSy85NG1kbTI1TjZHWGgvYjM1cElGWlhCSS9yWmpy WXJoWVJCRnUNCkd0ekdGSXc5QUFuRnlVekVVVVZmUFdVdEJlNXlITVc1NEM2MG5Iaz V4WUlhNnFGaGlMcDRQWXFa 
REPONSE 
------- 
Q3JZWDFpSXMNCmZSUk9GQT09DQo9U1RIcg0KLS0tLS1F TkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQ==" reason="EncryptionPublicKeyInvalidFormat" /> 
</AppsForYourDomainErrors> 
: 난 내 PARAMS이 너무 긴 것 같아요3210

는 응답이, 내가 그래서 내가 헤더에 추가하는 시도 .. Response.Write를()에서 오는 문제를 나누어 여러 부분으로 추측되는 것 같이 여전히

'Content-Length': params.length 

그리고 같은 문제 :

을 나는 아이디어의 부족 해요
REPONSE 
------- 
<?xml version="1.0" encoding="UTF-8"?> 
<AppsForYourDomainErrors> 
    <error errorCode="1411" invalidInput="LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQpWZXJzaW9uOiBHbn VQRyB2MS40LjEwIChHTlUvTGludXgpDQoNCm1RRU5CRXJXYUQ0QkNBQ3QybmdmczYv K1FPR1lieE5iYzNnTG5YSHRxcDdOVFRYTlc0U0pvKy9BMW9VWm9HeEENClF4NnpGWG hRLzhNWFc2Nis4U1RTMVlxTkpPQVJGdGpiSUtQd2pyZGN1a2RQellWS0dacmUwUmF4 Q25NeUNWKzYNCkY0WU5RRDFVZWdIVHUyd0NHUjF1aVlPZkx4VWE3L2RvNnMzMVdSVE g4dmJ0aVBZOS82b2JFSXhEakR6S0lxWU8NCnJ2UkRXcUFMQllrbE9rSjNIYmdmeWw0 MkVzbkxpQWhTK2RNczJQQ0RpMlgwWkpDUFo4ZVRqTHNkQXRxVlpKK1INCldDMUozVU R1RmZtY3BzRFlSdFVMOXc2WU10bGFwQys5bW1KM0FCRUJBQUcwVjBSaGMyaGxjaUJV WlhOMElDaFUNCmRHVnlNa0JrWVhOb1pYSXRhSGxrTFhSbGMzUXVZMjl0UG9rQk9BUV RBUUlBSWdVQ1N0Wm9QZ0liRFFZTENRZ0gNCmsxOVFja1Rwd0Jkc2tFWXVtRnZtV3Zl NVVYMlNWVjdmek9DMG5adGdGeHRaR2xKaEdtanNBM3J4RlRsYitJcmENCldaYXlYQ1 dZaUN6ZDdtOXo1L0t5R0QyR0ZUSy85NG1kbTI1TjZHWGgvYjM1cElGWlhCSS9yWmpy WXJoWVJCRnUNCkd0ekdGSXc5QUFuRnlVekVVVVZmUFdVdEJlNXlITVc1NEM2MG5Iaz V4WUlhNnFGaGlMcDRQWXF 
REPONSE 
------- 
aQ3JZWDFpSXMNCmZSUk9GQT09DQo9U1RIcg0KLS0tLS1F TkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQ==" reason="EncryptionPublicKeyInvalidFormat" /> 
</AppsForYourDomainErrors> 

, 도움은 환영받을 것이다 :

답변

1

http://unirest.io/nodejs.html을 사용하여 해결책을 찾았습니다.

이제 완벽하게 작동합니다. documentation에서 기반

function uploadPublicKey(domain, key, token) { 
    var params = 
     "<atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'>"+ 
      "<apps:property name='publicKey' value='"+key+"'/>"+ 
     "</atom:entry>"; 


    unirest 
    .post('https://apps-apis.google.com/a/feeds/compliance/audit/publickey/' + encodeURIComponent(domain)) 
    .headers({ 
     'Authorization': 'OAuth ' + token, 
     'Content-Type': 'application/atom+xml;charset=utf-8', 
     'Content-Length': params.length} 
     ) 
    .send(params) 
    .end(function (response) { 
     console.log(response.body); 
    }); 
} 
0

당신은 당신의 base64로 인코딩 된 문자열에 공백 (이 응답에 표시됩니다) 있습니다. 공백을 제거하십시오 (예 : key.replace(/\s/g, '')). 괜찮습니다.

+0

답을위한 Thx 그러나 문제는 여기에서 오지 않는다, 나는 이미 아직도 동일한 문제를 시도했다; 첫 번째 응답에 더 많은 문자가 있습니다. – Delconi

0

,

오류 코드 1411 (EncryptionPublicKeyInvalidFormat)로 돌아갑니다 잘못된 키를 업로드하는 시도 : 여기를 할 수 있습니다 사람들을위한 코드입니다.

또한 잘못된 OpenPGP 키는 일반적으로 가장 일반적인 오류 원인입니다.이 경우 이메일 감사 API에 대한 단계별 지침 요약을 따르십시오. generate a public key 마지막 단계는 머리말을 포함하여 모든 행을 복사하고 여분의 행을 추가하지 않는다는 것을 이중 확인하는 에 대해 언급했습니다.

마지막으로는, uploading the public key에서, 아래의 예와 같이 공개 키를 base64 인코딩과 XML 항목을 작성하여 시작

:

<atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'> 
<apps:property name="publicKey" value="the base64 Encoded Key"/> 
</atom:entry> 

'공개 키'에 HTTP POST 요청을 보내기에 URI를 공급하여 Google Apps 도메인은 :

POST https://apps-apis.google.com/a/feeds/compliance/audit/publickey/{domain name} 

성공하면, 서버는 구글 데이터 API HTTP status codes 문서에서 발견 된 201 CREATED 상태 코드를 반환합니다.

인증 프로토콜에 대한 자세한 내용을 비롯한 자세한 정보는 해당 문서를 참조하십시오.