How do I set return_uri for GoogleWebAuthorizationBroker.AuthorizeAsync?

后端 未结 3 421
谎友^
谎友^ 2020-12-01 21:24

I am trying to use the Google Calendar API in my non-MVC .NET Web Application. (This appears to be an important distinction.)

I’ve tried to us

3条回答
  •  独厮守ぢ
    2020-12-01 21:29

    You can use this code: (original idea from http://coderissues.com/questions/27512300/how-to-append-login-hint-usergmail-com-to-googlewebauthorizationbroker)

    dsAuthorizationBroker.RedirectUri = "my localhost redirect uri";
    UserCredential credential = await dsAuthorizationBroker.AuthorizeAsync(...
    

    dsAuthorizationBroker.cs

    using System;
    using System.Collections.Generic;
    using System.Threading;
    using System.Threading.Tasks;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Auth.OAuth2.Flows;
    using Google.Apis.Auth.OAuth2.Requests;
    using Google.Apis.Util.Store;
    
    namespace OAuth2
    {    
        public class dsAuthorizationBroker : GoogleWebAuthorizationBroker
        {
            public static string RedirectUri;
    
            public new static async Task AuthorizeAsync(
                ClientSecrets clientSecrets,
                IEnumerable scopes,
                string user,
                CancellationToken taskCancellationToken,
                IDataStore dataStore = null)
            {
                var initializer = new GoogleAuthorizationCodeFlow.Initializer
                {
                    ClientSecrets = clientSecrets,
                };
                return await AuthorizeAsyncCore(initializer, scopes, user,
                    taskCancellationToken, dataStore).ConfigureAwait(false);
            }
    
            private static async Task AuthorizeAsyncCore(
                GoogleAuthorizationCodeFlow.Initializer initializer,
                IEnumerable scopes,
                string user,
                CancellationToken taskCancellationToken,
                IDataStore dataStore)
            {
                initializer.Scopes = scopes;
                initializer.DataStore = dataStore ?? new FileDataStore(Folder);
                var flow = new dsAuthorizationCodeFlow(initializer);
                return await new AuthorizationCodeInstalledApp(flow, 
                    new LocalServerCodeReceiver())
                    .AuthorizeAsync(user, taskCancellationToken).ConfigureAwait(false);
            }
        }
    
    
        public class dsAuthorizationCodeFlow : GoogleAuthorizationCodeFlow
        {
            public dsAuthorizationCodeFlow(Initializer initializer)
                : base(initializer) { }
    
            public override AuthorizationCodeRequestUrl
                           CreateAuthorizationCodeRequest(string redirectUri)
            {
                return base.CreateAuthorizationCodeRequest(dsAuthorizationBroker.RedirectUri);
            }
        }    
    }
    

提交回复
热议问题