2013-02-26 18 views
5

Ho riscontrato un problema durante il tentativo di eseguire una richiesta Web su UGC e l'autenticazione con oAuth. Sto facendo un WebRequest come ad esempio: -Tridion Servizio UGC e autenticazione oAuth

WebRequest wr = WebRequest.Create("http://ugc.service/odata.svc/Ratings(Id=200)"); 
wr.Headers["authorization"] = "OAuth " + auth; 

Dove autenticazione è il mio token restituito dal access_token.svc. Secondo la documentazione il token restituito dal servizio dovrebbe essere qualcosa del tipo: -

HufXeuUt% 2FYYElA8SYjJOkUkrXxV9dyXRirmKhjW% 2FB% 2FU% 3D

Tuttavia, quello che sto viene tornato da access_token.svc è più simile a: -

{ "access_token": "client_id% 3dtestuser% 26expiresOn% 3d1361898714646% 26digest% 3d% 2FW% 2fvyhQneZHrm1aGhwOlgLtA9xGWd77hkxWbjmindtM% 3d", "expires_in": 300}

ho analizzato il JSON per estrarre varie stringhe e Ho provato a passare questi attraverso l'autorizzazione, ma qualunque cosa provassi ottengo un errore nel lo gs - "ERROR OAuth2AccessToken - Digest è sbagliato." Esattamente quale parte del token e in quale formato dovrei passare per l'autorizzazione?

Molte grazie

John

+0

Domanda difficile, non ho praticamente alcuna esperienza con OAuth. Ma so che le proprietà passate attraverso le intestazioni sono precedute da oauth_, ad es. oauth_consumer_key, oauth_token. Le proprietà restituite mi sembrano utilizzabili in una stringa di query. L'utilizzo di una libreria OAuth potrebbe aiutarti un po '. http://oauth.net/code/ –

+1

Mi sono ricontattato per includere oauth e odata in quanto sembra un problema con questo piuttosto che con Tridion. Prova a cercare domande intorno a questi argomenti. –

risposta

5

Come lei ha ricordato, il protocollo è questo:

  1. si effettua una richiesta posta al token di accesso end-point per ricevere un token (è necessario per fornire qui il tuo client_id e il tuo client_secret come intestazioni o come parametri di query);

  2. Si ottiene una risposta simile a questa: {"access_token":"sometoken","expires_in":300}; 2.1 È importante sapere che il token è codificato per URL e in formato UTF-8, quindi, sul lato Java, è necessario eseguire URLDecoder.decode("sometoken", "UTF-8"); mentre sul lato .NET è necessario eseguire HttpUtility.UrlDecode("sometoken", System.Text.Encoding.UTF8);;

  3. La richiesta successiva deve includere l'intestazione dell'autorizzazione. Sul lato Java si fa builder.header("authorization", "OAuth " + decodedTokenString); mentre sul lato .NET è possibile utilizzare Client.Headers["authorization"] = "OAuth " + DecodedTokenString;

Degno di nota è che lo SharedSecret definito nel cd_webservice_conf.xml (/Configuration/AuthenticationServer/SharedSecret/) del TokenAccessPoint deve essere lo stesso del SharedSecret definito in il cd_ambient_conf.xml (/Configuration/Security/SharedSecret/) dell'endpoint (WebService).

Sei sicuro di aver decodificato correttamente il token ottenuto dal server? Sei sicuro di aver configurato correttamente SharedSecret nei due file di configurazione?

Spero che questo aiuti.

+0

Ciao Daniel, scusami se non ti aggiorno su questo prima. È stata la decodifica del token, come hai giustamente sottolineato, e un valore di configurazione errato che ci stava causando il problema. Tutto bene ora. Grazie, John – John