2015-06-19 3 views
2

Я создаю свой JWT, если мой токен правильно, почему не работает? в консоли разработчика Google я включен Gmail плюс YouTube и других API, в полномочия создания и загрузки JSONКак получить доступ к API Gmail?

{ 
    "private_key_id": "22dcf", 
    "private_key": "-----BEGIN PRIVATE KEY-----(remove)-----END PRIVATE KEY-----\n", 
    "client_email": "[email protected]", 
    "client_id": "jc6.apps.googleusercontent.com", 
    "type": "service_account" 
} 

первый генерировать маркер

var sHead=JSON.stringify({"alg":"RS256","typ":"JWT"});  
      var iat=timeStampf(); 
      var exp=iat+3600; 
      var sPayload=JSON.stringify({ 
         "iss":client_email, 
         "scope":scope,//gmail scope https://mail.google.com/     
         "aud":"https://www.googleapis.com/oauth2/v3/token", 
         "exp":exp, 
         "iat":iat 
        });   
      var sJWS = KJUR.jws.JWS.sign("RS256", sHead,sPayload, private_key); 
      var paramstoken="grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-ty 

pe%3Ajwt-bearer&assertion="+sJWS 



    getToken("POST","/oauth2/v3/token",paramstoken,jsonData,replier); 
/*rest petition return 200 OK 
     { 
     "access_token" : "1bHLl5EOtu1pxz3fmmetKx9W8CV4t79M", 
     "token_type" : "Bearer", 
     "expires_in" : 3600 
    }*/ 

Следующая я проверить мой маркер

function testToken(accessToken,replier) 
{ 
// /gmail/v1/users/me/messages /plus/v1/people/me 
    var client = vertx.createHttpClient().host(urlbase).port(443).ssl(true).maxPoolSize(10);  
    var request = client.request("GET", "/gmail/v1/users/me/messages", function(resp) { 
     console.log('server returned status code: ' + resp.statusCode()); 
     console.log('server returned status message: ' + resp.statusMessage()); 
     resp.bodyHandler(function(body) {   
      replier(JSON.parse(body.toString())); 
     }); 
    }); 
    request.headers() 
    .set("Content-type", contentType) 
    .set("Authorization", "Bearer "+accessToken); 
    request.end(); 
    client.close(); 
} 

если я используйте Google + область и это ходатайство ответ 200 ok

 https://www.googleapis.com/auth/plus.me /plus/v1/people/me 
    { 
"kind":"plus#person", 
"etag":"\"LR9iFZQGXELLHS07eQ\"", 
"objectType":"person","id":"1149981343","displayName":"","name":{"familyName":"","givenName":""},"image":{"url":"https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg?sz=50","isDefault":true},"isPlusUser":false,"language":"en_US","circledByCount":0,"verified":false} 

но если я пытаюсь с Gmail

{"error":{"errors":[{"domain":"global","reason":"failedPrecondition","message":"Bad Request"}],"code":400,"message":"Bad Request"}} 

ответ

2

В случае GMail, вы доступ к данным конкретного пользователя, поэтому при создании JWT, необходимо указать пользователя, которого вы пытаетесь выдать себя, т.е. пользователя, почтовый ящик которого вы хотите получить.

Вы можете сделать это с помощью суб: «электронный параметр адрес пользователя» при формировании набора

var sPayload=JSON.stringify({ 
        "iss":client_email, 
        "sub":USER_EMAIL_ADDRESS 
        "scope":scope,//gmail scope https://mail.google.com/     
        "aud":"https://www.googleapis.com/oauth2/v3/token", 
        "exp":exp, 
        "iat":iat 
       }); 
+0

хороший ти, новая ошибка, новый вопрос претензии JWT, следующий шаг –

Смежные вопросы