On Dec 12, 8:01 pm, eaudet <[email protected]> wrote:
> Thanks Eric!!
>
> It works. I would also say that you need the private key everytime you
> use a service call such as getting a profile, updating a profile,
> sending a notice etc..

Correct.  The call to service.setAuthSubToken(sessionToken,
privateKey);
sets your key for subsequent requests.

>
> - Erick
>
> On Dec 12, 4:54 pm, "Eric (Google)" <[email protected]> wrote:
>
> > You need to set your privateKey when setting the session token:
>
> > service.setAuthSubToken(sessionToken, privateKey);
>
> > See the example 
> > here:http://code.google.com/apis/gdata/authsub.html#request-session-token
>
> > Eric
>
> > On Dec 12, 10:52 am, eaudet <[email protected]> wrote:
>
> > > 1- Getting a token (this works all the time):
>
> > >        // this is the code called when Google Health is calling my app
> > > with a token et the request.
>
> > >         private void processAcceptAuthSubToken(HttpServletRequest request,
> > >                         HttpServletResponse response) throws IOException {
> > >                 /*
> > >                  * Request is caused by a user being redirected back from 
> > > AuthSub
> > > login
> > >                  */
> > >                 if (request.getParameter("token") != null) {
> > >                         HealthSample sp = new HealthSample();
> > >                         try {
> > >                                 // upgrade the single use token to a
> > > session token
> > >                                 String token = 
> > > sp.exchangeAuthSubToken(request
> > >                                                 .getParameter("token"));
>
> > >                                 request.getSession().setAttribute
> > > (MobiConstants.HEALTH_TOKEN, token);
>
> > > //                              sp.persistToken(token);
>
> > >                                 response.sendRedirect("Main.html");
> > >                         } catch (HealthSampleException e) {
> > >                                 System.err.println("Authentication 
> > > exception: "
> > >                                                 + e.getMessage());
> > >                         }
> > >                 }
> > >         }
>
> > > 2- upgrading a token (this works all the time):
>
> > >         public String exchangeAuthSubToken(String singleUseToken)
> > >                         throws HealthSampleException {
>
> > >                 try {
>
> > >                         PrivateKey privateKey =
> > > AuthSubUtil.getPrivateKeyFromKeystore(
> > >                                         "/AuthSubExample.jks",
> > > "password", "AuthSubExample",
> > >                                         "password");
> > >                         authSubToken =
> > > AuthSubUtil.exchangeForSessionToken(URLDecoder.decode
> > > (singleUseToken, "UTF-8"), privateKey);
>
> > >                 } catch (Exception e) {
> > >                         throw new HealthSampleException(
> > >                                         "Problem while exchanging
> > > AuthSub token.", e);
> > >                 }
>
> > >                 return authSubToken;
>
> > >         }
>
> > > 3. querying data (this fails on some users)
>
> > >         public String getProfile() throws HealthSampleException {
> > >                 if (this.authSubToken == null) {
> > >                         throw new HealthSampleException(
> > >                                         "Need to supply a token before
> > > retrieving profile.");
> > >                 }
> > >                 GoogleService service = new GoogleService("weaver",
> > > "HealthSample");
> > >                 service.setAuthSubToken(this.authSubToken);
> > >                 Query query = null;
> > >                 try {
> > >                         query = new Query(
> > >                                         new URL(
> > >                                                         
> > > "https://www.google.com/h9/feeds/profile/default?
> > > digest=true"));
> > >                 } catch (MalformedURLException e) {
> > >                         throw new HealthSampleException("Bad profile
> > > URL!", e);
> > >                 }
>
> > >                 try {
> > >                         Feed result = service.query(query,
> > > Feed.class);
> > >                         // there should be only one entry that
> > > contains
> > >                         // the CCRg document for the profile.
> > >                         for (Entry entry : result.getEntries()) {
> > >                                 return prettifyXmlBlob(entry.getXmlBlob
> > > ());
> > >                         }
> > >                 } catch (Exception e) {
> > >                         throw new HealthSampleException("Error
> > > retrieving profile", e);
> > >                 }
>
> > >                 // If we don't find any profile data, return nothing.
> > >                 // This probably means the sample app wasn't granted
> > > full access.
> > >                 return "";
> > >         }
>
> > > On Dec 11, 4:30 pm, "Eric (Google)" <[email protected]> wrote:
>
> > > > On Dec 10, 8:55 am, eaudet <[email protected]> wrote:
>
> > > > > Update,
>
> > > > > It works for at least one user but for some reasons for other users it
> > > > > fails.
>
> > > > > This makes me think it is possibly a bug on the google health (H9)
> > > > > side. Can you insvestigate the profiles service offered on the H9
> > > > > server?
>
> > > > Please post code snippets for getting atoken,upgradingatoken, a
> > > > and querying data.
>
> > > > Eric
>
> > > > > - Erick
>
> > > > > On Dec 9, 11:26 pm, eaudet <[email protected]> wrote:
>
> > > > > > Hi Eric
>
> > > > > > I am still stuck with this problem. It's been a week now. I am 
> > > > > > running
> > > > > > all tests using secure=0 but when switching to secure=1, I am uable 
> > > > > > to
> > > > > > get a one timetoken, convert it to a sessiontokenusing my perm file
> > > > > > (priorly uploaded to H9) but for some reasons I can't get the 
> > > > > > profile.
> > > > > > I have the exact same error (Unknown authorization header).
>
> > > > > > I have flushed all my database users to make sure any old tokens 
> > > > > > were
> > > > > > hanging around and throwing an exception that would make my apps
> > > > > > crashed but it still give the same error.
>
> > > > > > I have filled out all the needed criteria to post my solution for
> > > > > > final acceptance and the only thing not working is the secure=1 
> > > > > > thing.
> > > > > > It used to work before December 2nd. ;-(
>
> > > > > > Can you help me solve this issue? I am using Java and GWT.
>
> > > > > > Thanks,
>
> > > > > > Erick
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Health Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/googlehealthdevelopers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to