2015-11-29 3 views
2

Поскольку Google.Apis.Oauth2.v2 в GoogleWebAuthorizationBroker.AuthorizeAsync() запросов в Ури в статический файл JSON, который содержит ссылки и параметры для служб Google oauth2, как можно указать параметр login_hint, если я случайно знать эту информацию раньше времени?Укажите login_hint с использованием .NET Google.Apis.Oauth2.v2

var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
    new Uri("ms-appx:///Assets/client_secret.json"), 
    myScopes, 
    "user", 
    CancellationToken.None); 

Выписка из client_secret.json:

"auth_uri":"https://accounts.google.com/o/oauth2/[email protected]" 
  • Как указать login_hint parameteron каждого пользователя?
+0

Возможный дубликат [Как добавить "& логин \ [email protected]" в GoogleWebAuthorizationBroker] (HTTP: // stackoverflow.com/questions/27512300/how-to-append-login-hint-usergmail-com-to-googlewebauthorizationbroker) – DaImTo

+0

Да, именно так. Я отправил в качестве ответа код, который я написал после использования того, на что вы ссылались. – ericdes

ответ

1

Я в конечном итоге подклассов Google брокера веб-авторизации, как это:

public class MyOAuth2WebAuthorizationBroker : GoogleWebAuthorizationBroker 
{ 
    public static async Task<UserCredential> AuthorizeAsync(ClientSecrets clientSecrets, 
     IEnumerable<string> scopes, string user, CancellationToken taskCancellationToken) 
    { 
     var initializer = new MyOAuth2AuthorizationCodeFlow.Initializer 
     { 
      ClientSecrets = clientSecrets, 
      Scopes = scopes, 
      DataStore = new StorageDataStore(), 
     }; 

     var installedApp = new AuthorizationCodeWindowsInstalledApp(new MyOAuth2AuthorizationCodeFlow(initializer, user)); 
     return await installedApp.AuthorizeAsync(user, taskCancellationToken).ConfigureAwait(false); 
    } 

    public class MyOAuth2AuthorizationCodeFlow : GoogleAuthorizationCodeFlow 
    { 
     private string loginHint { get; set; } 
     public MyOAuth2AuthorizationCodeFlow(Initializer initializer, string loginHint) : base(initializer) 
     { 
      this.loginHint = loginHint; 
     } 

     public override AuthorizationCodeRequestUrl CreateAuthorizationCodeRequest(string redirectUri) 
     { 
      return new GoogleAuthorizationCodeRequestUrl(new Uri(AuthorizationServerUrl)) 
      { 
       ClientId = ClientSecrets.ClientId, 
       Scope = string.Join(" ", Scopes), 
       RedirectUri = redirectUri, 
       LoginHint = this.loginHint 
      }; 
     } 
    } 

} 
+1

На данный момент это похоже на правильное решение. В будущем клиентская библиотека должна обеспечить лучший способ добавления параметров URL. – peleyal

+0

Сделайте мне одолжение, добавьте его как проблему и перейдите по ссылке https://github.com/google/google-api-dotnet-client/issues. Добавьте свой вопрос. – DaImTo