2017-04-13 2 views
1

Je suis nouveau à la vérification OAuth et je n'ai plus d'options ici parce que lorsque j'essaie d'accéder à l'écran OAuth de Google, il ne me fournit jamais le code d'accès. Je peux accéder à l'écran de connexion puis, si je choisis Autoriser ou Refuser, cela me donne un message de réussite. Il n'y a pas d'erreur mais parfois cela donne une exception de protocole invalide mais je ne sais pas pourquoi.Google OAuth v2 pour UWP

J'essaie d'obtenir de l'aide de here et aussi de here, mais rien ne fonctionne.

Le code que je me sers est ci-dessous:

 string state = GenerateRandomBase64Url(32); 
     string code_verifier = GenerateRandomBase64Url(32); 
     string code_challenge = GenerateBase64urlencodeNoPadding(sha256(code_verifier)); 

     string clientID = "1037832553054-2ktd0l6dop546i1ti312r2doi63sglfe.apps.googleusercontent.com"; 
     string redirectURI = "uwp.app:/oauth2redirect"; 
     string authorizationEndpoint = "https://accounts.google.com/o/oauth2/v2/auth"; 
     string tokenEndpoint = "https://www.googleapis.com/oauth2/v4/token"; 
     string userInfoEndpoint = "https://www.googleapis.com/oauth2/v3/userinfo"; 
     string youtubeScope = "https://www.googleapis.com/auth/youtube"; 
     string code_challenge_method = "S256"; 

     ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; 
     localSettings.Values["state"] = state; 
     localSettings.Values["code_verifier"] = code_verifier; 

     string authorizationRequest = string.Format([email protected]"{authorizationEndpoint}?response_type=code&scope={Uri.EscapeDataString(youtubeScope)}&redirect_uri={Uri.EscapeDataString(redirectURI)}&client_id={clientID}&state={state}&code_challenge={code_challenge}&code_challenge_method={code_challenge_method}&login_hint={EmailBox.Text.Trim()}"); 

     string endURL = "https://accounts.google.com/o/oauth2/approval?"; 
     // I don't know if this is actually valid because google says that this Url is not available 
     Uri startURI = new Uri(authorizationRequest); 
     Uri endURI = new Uri(endURL); 
     string result = string.Empty; 
     try 
     { 
      //var success = Windows.System.Launcher.LaunchUriAsync(new Uri(authorizationRequest)); 

      WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, startURI, endURI); 
      switch (webAuthenticationResult.ResponseStatus) 
      { 
       // Successful authentication.   
       case WebAuthenticationStatus.Success: 
        result = webAuthenticationResult.ResponseData.ToString(); 
        break; 
       // HTTP error.   
       case WebAuthenticationStatus.ErrorHttp: 
        result = webAuthenticationResult.ResponseErrorDetail.ToString(); 
        break; 
       default: 
        result = webAuthenticationResult.ResponseData.ToString(); 
        break; 
      } 

     } 
     catch (Exception ex) 
     { 
      result = ex.Message; 
     } 
     response.Text = result; 

// the string that I get looks like this 
// https://accounts.google.com/o/oauth2/approval?as=410b4db829b95fce&pageId=none&xsrfsign=AMt42IIAAAAAWO9e-l2loPR2RJ4_HzjfNiGJbiESOyoh 

Je ne sais pas si cela est la bonne façon de le faire dans les applications UWP. En outre, la chaîne que je reçois du résultat est plutôt une URL et elle n'inclut rien qui soit considéré comme code comme décrit dans les exemples de Google. Alors quelqu'un peut-il souligner ce que je fais mal ici? Cela devrait être simple mais je ne sais pas ce que je fais de mal. Merci

+0

J'ai testé Google OAuth v2 pour UWP en utilisant officiel [exemple de code] (https://github.com/googlesamples/oauth-apps-for-windows). Et j'ai utilisé 'WebAuthenticationBroker.AuthenticateAsync' pour obtenir le résultat de l'authentification web. Mais je ne peux pas reproduire votre problème, Pourriez-vous me fournir votre code source afin que je puisse faire plus de tests sur ce problème? –

+0

Eh bien, je suppose que c'était juste un problème avec '?' À la fin de 'endURL', je l'ai mis ici mais je ne l'ai pas utilisé dans mon code réel et je l'ai trié en quelque sorte. Merci quand même. – Ahmar

Répondre

0

Je ne suis pas sûr de la façon dont j'ai réussi à résoudre le problème la dernière fois que mon commentaire suggéré. WebAuthenticationBroker dans UWP ne fonctionne plus de cette façon ou du moins je le pense. Il demande en fait un startURL et un callbackURL.

je suis tombé sur le même problème, comme dans ma question, hier et je l'ai résolu à travers la mise de mon application redirectUri à la place de callbackURL et WebAuthenticationBroker ne jette pas une exception plus et il fournit un bon résultat.

Donc, pour résoudre le problème, voici comment vous le faire:

string redirectURI = "uwp.app:/oauth2redirect"; 

Uri startURI = new Uri(authorizationRequest); // as in the question 
Uri endURI = new Uri(redirectUri); // change to 'redirectUri' 
WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, startURI, endURI); 
switch(webAuthenticationResult.ResponseStatus) 
{ 
     case WebAuthenticationStatus.Success: 
     break; 
} 

J'espère que cela aide quelqu'un là-bas. Merci