Sto provando a connettermi a gmail tramite il suo IMAP API. Sto usando Bruno Morency node-imap library per quello. Per creare la oauth_signature, timestamp e nonce, utilizzo another library.Connessione all'API IMAP di Gmail in javascript/node.js
Per essere più specifici: il proprietario del prodotto ha già autenticato il consumatore. Quindi ho un token + segreto d'accesso. Naturalmente ho anche il token segreto del consumatore. Quindi, quello che voglio è effettuare il login con il meccanismo XOAuth descritto here (intestazione: SASL Initial Client Request).
Quando si esegue il codice ottengo un errore:
Error while executing request: Invalid credentials d43if2188869web.36
mi chiedo che cosa sto facendo male. In realtà potrebbero esserci più motivi. Codifica base64 errata (anche se la codifica probabilmente funziona proprio da quando si ottiene un errore diverso per codifica diversa, sono abbastanza sicuro che non lo è), calcolo della firma errato (UPDATE: l'ho testato ora con http://oauth.net/core/1.0a/#sig_base_example), calcolo nonce o altro.
mi può autenticare usando le stesse credenziali (Consumer + ressource-proprietario) in un'applicazione Java, quindi le credenziali sono molto probabilmente non la causa dell'errore (codifica solo sbagliato/firma calcolo)
Infine il codice. Ho omesso il segreto + chiave del consumatore né il token del proprietario di risorsa + segreto per ovvi motivi).
var oauth_version = "1.0";
var oauth_timestamp = OAuth.timestamp();
var oauth_nonce = OAuth.nonce(6); //random nonce?
var oauth_consumer_key = "NOTFORYOU"; //validated
var oauth_consumer_secret = "NOTFORYOU"; //validated
var oauth_token = "NOTFORYOU"; //validated
var oauth_token_secret = "NOTFORYOU"; //validated
var email = "NOTFORYOU"; //validated
var oauth_signature_method = "HMAC-SHA1";
var method = "GET";
var action = "https://mail.google.com/b/"
+email
+"/imap/"; //gmail's request url
//signature
var oauth_signature_method = "HMAC-SHA1"; //from https://developers.google.com/google-apps/gmail/oauth_protocol
//example values for validating signature from http://oauth.net/core/1.0a/#sig_base_example
oauth_consumer_key="dpf43f3p2l4k3l03";
oauth_nonce="kllo9940pd9333jh";
oauth_signature_method="HMAC-SHA1";
oauth_timestamp="1191242096";
oauth_token="nnch734d00sl2jdk";
oauth_version="1.0";
action="http://photos.example.net/photos?file=vacation.jpg&size=original";
method="GET";
//signature
var signature_basestring_parameters = {
oauth_version: oauth_version
, oauth_consumer_key: oauth_consumer_key
, oauth_timestamp: oauth_timestamp
, oauth_nonce: oauth_nonce
, oauth_token: oauth_token
, oauth_signature_method: oauth_signature_method
}
//var signature_basestring = oauth_consumer_key+"&"+oauth_token_secret;
var signature_basestring = OAuth.SignatureMethod.getBaseString({method: method, action: action, parameters: signature_basestring_parameters});
var methodName = oauth_signature_method;
var signer = OAuth.SignatureMethod.newMethod(methodName, {
consumerSecret: oauth_consumer_secret,
tokenSecret: oauth_token_secret
}
);
console.log("signature_basestring=["+signature_basestring+"]");
var oauth_signature = signer.getSignature(signature_basestring);
console.log("oauth_signature=["+oauth_signature+"]");
oauth_signature=OAuth.percentEncode(oauth_signature);
console.log("(escaped) oauth_signature=["+oauth_signature+"]"); //prints out tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D as in the [example](http://oauth.net/core/1.0a/#sig_base_example)
//base-string
var baseStringDecoded = "GET"
+ " "
+ "https://mail.google.com/b/"+email+"/imap/"
+ " "
+ "oauth_consumer_key=\""+oauth_consumer_key+"\","
+ "oauth_nonce=\""+oauth_nonce+"\","
+ "oauth_signature=\""+oauth_signature+"\","
+ "oauth_signature_method=\""+oauth_signature_method+"\","
+ "oauth_timestamp=\""+oauth_timestamp+"\","
+ "oauth_token=\""+oauth_token+"\","
+ "oauth_version=\""+oauth_version+"\"";
var baseString = Base64.encode( //base64 from http://www.webtoolkit.info/javascript-base64.html
baseStringDecoded
);
//create imap connection
var imap = new ImapConnection({
host: 'imap.gmail.com',
port: 993,
secure: true,
debug: true,
xoauth: baseString
});
AGGIORNAMENTO: ho trovato un example come generare la stringa firma di base. sulla base di questo ho cambiato il mio codice. Di conseguenza, ora ottengo gli stessi risultati per la firma (generando la stringa di base per la firma, il calcolo del valore della firma, il valore della firma della codifica percentuale) come nell'esempio. Ciò significa che sono (vale a dire la libreria oauth utilizzata) che molto probabilmente calcola la oauth_signature nel modo giusto e qualcos'altro sta andando storto.
grazie una dipendenza meno – forste