How to prevent an ASP NET MVC application requesting authorization from Google every hour?


We are using packages Google.Apis.Calendar.v3 and Google.Apis.Auth.Mvc in an ASP .NET MVC application with users.

We want each user to have access to their Google Calendar, so it is necessary that each one of them give permission to our application. We have read a lot and it is said that there is a way to prevent the application from asking the user for these credentials every hour

We have looked at solutions like this and do not work for us

solutions like this one we do not know how to use them in our MVC application

users may or may not register on our site using google

This is the last code that we tried and everything works correctly, except that every hour the users who had already given permission to our application had to do it again and to re-authenticate with google and give permissions:

FlowMetadata implementation

    public class AppFlowMetadata : FlowMetadata
        private static readonly IAuthorizationCodeFlow flow =
            new ForceOfflineGoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
                ClientSecrets = new ClientSecrets
                    ClientId = "MY_VALID_CLIENT_ID",
                    ClientSecret = "MY_VALID_CLIENT_SECRET"
                Scopes = new[] { CalendarService.Scope.Calendar },
                DataStore = new FileDataStore("Google.Api.Auth.Store")


        public override string GetUserId(Controller controller)
            var userId = controller.User.Identity.GetUserId();
            return userId;

        public override IAuthorizationCodeFlow Flow
            get { return flow; }

GoogleAuthorizationCodeFlow implementation forcing offline

    internal class ForceOfflineGoogleAuthorizationCodeFlow : GoogleAuthorizationCodeFlow
        public ForceOfflineGoogleAuthorizationCodeFlow(GoogleAuthorizationCodeFlow.Initializer initializer) : base(initializer) { }

        public override AuthorizationCodeRequestUrl CreateAuthorizationCodeRequest(string redirectUri)
            return new GoogleAuthorizationCodeRequestUrl(new Uri(AuthorizationServerUrl))
                ClientId = ClientSecrets.ClientId,
                Scope = string.Join(" ", Scopes),
                RedirectUri = redirectUri,
                AccessType = "offline",
                ApprovalPrompt = "force"


    public class AuthCallbackController : Google.Apis.Auth.OAuth2.Mvc.Controllers.AuthCallbackController
        protected override Google.Apis.Auth.OAuth2.Mvc.FlowMetadata FlowData
            get { return new AppFlowMetadata(); }

Test controller action

    public async Task IndexAsync(CancellationToken cancellationToken)
        var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()).

        if (result.Credential != null)
            var service = new CalendarService(new BaseClientService.Initializer()
                HttpClientInitializer = result.Credential,
                ApplicationName = "TEST",

            IList list = service.CalendarList.List().Execute().Items;
            var selected = list.First();
            EventsResource.ListRequest request = service.Events.List(selected.Id);
            request.TimeMin = new DateTime?(new DateTime(2017, 1, 1));
            request.ShowDeleted = false;
            request.SingleEvents = true;
            request.MaxResults = 10;
            request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
            Events events = request.Execute();

            return View(events);
            return new RedirectResult(result.RedirectUri);

Show source
|   | google-api-dotnet-client   2017-11-29 18:11 0 Answers

Answers to How to prevent an ASP NET MVC application requesting authorization from Google every hour? ( 0 )

Leave a reply to - How to prevent an ASP NET MVC application requesting authorization from Google every hour?

◀ Go back