Calendar sign-in web view version issue
Checklist:-
OGCS Version: v1.2.3.4
Edition: Installed / Portable
Sync Direction: G->O / O->G / O<->G
Bug Description
When attempting to load calendars, authenticating with Microsoft SSO using Duo, the web view browser is regarded as "out of date", perhaps because it's user agent string or some other configuration issue is presenting as an obsolete browser.
Steps to Reproduce the Issue
- Install OGCS latest pre-release that works without having Outlook classic installed.
- Attempt to load your Outlook calendars.
- Sign in to your organization's single sign on (in my case it uses Duo)
- Failure to proceed -- Duo detects an "out of date" browser, and doesn't allow authentication.
Any other information
It doesn't seem to matter which browser you're using, or which is set as default. The problem appears to be related to the browser window that OCGS itself is spawning to interact with the Microsoft sign-in and Duo.
OGcalsync.log
Could you try altering the browser agent string that OGCS uses - see if that is what Duo is picking up on?
- Go to Settings > Application Behaviour > Proxy Settings
- Select "Custom settings" and click the "Check" button
- The Browser Agent string should update to the default browser installed on your system.
- Revert back to "Inherit from Internet Explorer"
- Try connecting to Outlook Online again
Please give the above a go first, though I rather suspect the same issue will occur.
:package: If you could then deploy Portable_OGCS_v3.0.0.20.zip (you can extract it into the same folder you are running v3.0.0.16 if you like) and repeat the above steps.
Please let me know how it goes!
I'll let you know how it goes next week, thanks.
Sent from my mobile device
From: Paul Woolcock @.> Sent: Thursday, July 31, 2025 7:08:20 PM To: phw198/OutlookGoogleCalendarSync @.> Cc: Dr. Daniel Smullen @.>; Author @.> Subject: Re: [phw198/OutlookGoogleCalendarSync] Calendar sign-in web view version issue (Issue #2154)
[https://avatars.githubusercontent.com/u/11843015?s=20&v=4]phw198 left a comment (phw198/OutlookGoogleCalendarSync#2154)https://github.com/phw198/OutlookGoogleCalendarSync/issues/2154#issuecomment-3140726498
Please give the above a go first, though I rather suspect the same issue will occur.
📦 If you could then deploy Portable_OGCS_v3.0.0.20.ziphttps://github.com/user-attachments/files/21534733/Portable_OGCS_v3.0.0.20.zip (you can extract it into the same folder you are running v3.0.0.16 if you like) and repeat the above steps.
Please let me know how it goes!
— Reply to this email directly, view it on GitHubhttps://github.com/phw198/OutlookGoogleCalendarSync/issues/2154#issuecomment-3140726498, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAU4IS6HZRPWXPD6ZYBXSGL3LJEQJAVCNFSM6AAAAACBMGCUICVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTCNBQG4ZDMNBZHA. You are receiving this because you authored the thread.Message ID: @.***>
Could you try altering the browser agent string that OGCS uses - see if that is what Duo is picking up on?
1. Go to Settings > Application Behaviour > Proxy Settings 2. Select "Custom settings" and click the "Check" button 3. The Browser Agent string should update to the default browser installed on your system. 4. Revert back to "Inherit from Internet Explorer" 5. Try connecting to Outlook Online again
I attempted to do this. The agent text I retrieved was: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:141.0) Gecko/20100101 Firefox/141.0. Unfortunately, when I went back to "Inherit from Internet Explorer" and attempted to add my organization's email, it failed in the same way as before.
Using the v3.0.0.20 portable you provided, the user agent string that I retrieved was the same. However, when I attempted to execute step 5, I got the following error:
Authenticating with Microsoft
Unable to authenticate with Microsoft. The following error occurred: One or more errors occurred. No service for type 'Microsoft.Identity.Client.IMsalHttpClientFactory' has been registered.
Unable to get the list of Outlook calendars. The following error occurred:
Microsoft handshake failed.
Authenticating with Microsoft
Unable to authenticate with Microsoft. The following error occurred: One or more errors occurred. No service for type 'Microsoft.Identity.Client.IMsalHttpClientFactory' has been registered.
Unable to get the list of Outlook calendars. The following error occurred:
Microsoft handshake failed.
I wasn't able to proceed from this point, the browser window didn't open and so I wasn't able to log in to access my organization's email's associated calendars. I was able to retrieve my GMail calendars without any problems, though.
:package: Thanks for the update - could you confirm if it's resolved with hotfix v3.0.0.21.zip, after applying it over v3.0.0.21 (see instructions for applying).
CRCs: Zip = C660CD61 Exe = 7D6A8C7B
Many thanks!
Some small progress with the hotfix. I was able to get to the organization login screen, but it still failed as Duo says the browser is out of date. It actually says in this case that a Windows update is required, rather than a browser update, so that's a different error. The browser agent is still reported as Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:141.0) Gecko/20100101 Firefox/141.0 but it fails when inheriting the proxy settings from Internet Explorer, and when selecting no proxy.
Could you provide the exact error message and ideally the logfile on the latest hotfix?
Do you need to use a proxy at work? Does retrieval of your Google calendars work if you select no proxy instead of inherit from IE within OGCS?
Do you need to use a proxy at work? Does retrieval of your Google calendars work if you select no proxy instead of inherit from IE within OGCS?
No, I don't need to use a proxy. I haven't had any problems retrieving my Google calendars, the problem only happens with my Outlook (organization's) calendars.
Here's the exact error message in the browser window from Duo:
Here's the contents of the log:
2025-08-06 19:45:47,617 INFO 1 OutlookGoogleCalendarSync.Google.ErrorReporting [141] - Turned error reporting OFF
2025-08-06 19:45:47,635 INFO 1 OutlookGoogleCalendarSync.Program [256] - Program started: v3.0.0.21
2025-08-06 19:45:47,636 INFO 1 OutlookGoogleCalendarSync.Program [257] - Started interactively.
2025-08-06 19:45:47,636 INFO 1 OutlookGoogleCalendarSync.Program [261] - Logging to: C:\OGCS\OGcalsync.log
2025-08-06 19:45:47,636 INFO 1 OutlookGoogleCalendarSync.Program [266] - Purging log files older than 30 days...
2025-08-06 19:45:47,638 INFO 1 OutlookGoogleCalendarSync.Program [279] - Purge complete.
2025-08-06 19:45:47,638 INFO 1 OutlookGoogleCalendarSync.Settings [50] - Running OGCS from C:\OGCS\OutlookGoogleCalendarSync.exe
2025-08-06 19:45:47,639 INFO 1 OutlookGoogleCalendarSync.Program [159] - Storing user files in directory: C:\OGCS
2025-08-06 19:45:47,639 DEBUG 1 OutlookGoogleCalendarSync.Telemetry [40] - Settings not loaded; checking if the raw settings file has Gmail account set.
2025-08-06 19:45:47,653 WARN 1 OutlookGoogleCalendarSync.Telemetry [50] - No Gmail account found, building custom thumbprint instead.
2025-08-06 19:45:48,746 DEBUG 1 OutlookGoogleCalendarSync.Google.Authenticator [319] - Getting MD5 hash for 'MEDIASERVER;12th Gen Intel(R) Core(TM) i7-12700K;72E6AB2D'
2025-08-06 19:45:48,747 DEBUG 1 OutlookGoogleCalendarSync.XMLManager [60] - Retrieved setting 'CloudLogging' with value 'true'
2025-08-06 19:45:48,748 INFO 1 OutlookGoogleCalendarSync.Google.ErrorReporting [135] - Turned error reporting ON
2025-08-06 19:45:48,749 DEBUG 1 OutlookGoogleCalendarSync.XMLManager [60] - Retrieved setting 'Portable' with value 'true'
2025-08-06 19:45:48,749 DEBUG 1 OutlookGoogleCalendarSync.XMLManager [60] - Retrieved setting 'LoggingLevel' with value 'DEBUG'
2025-08-06 19:45:48,750 INFO 1 OutlookGoogleCalendarSync.Settings [485] - Logging level configured to 'DEBUG'
2025-08-06 19:45:48,752 DEBUG 1 OutlookGoogleCalendarSync.Updater [348] - Setting up Squirrel handlers.
2025-08-06 19:45:48,993 DEBUG 21 OutlookGoogleCalendarSync.XMLManager [60] - Retrieved setting 'CompletedSyncs' with value '0'
2025-08-06 19:45:48,994 DEBUG 21 OutlookGoogleCalendarSync.XMLManager [60] - Retrieved setting 'Donor' with value 'true'
2025-08-06 19:45:48,995 DEBUG 21 OutlookGoogleCalendarSync.XMLManager [60] - Retrieved setting 'Subscribed' with value '2000-01-01T00:00:00'
2025-08-06 19:45:48,997 DEBUG 21 OutlookGoogleCalendarSync.XMLManager [60] - Retrieved setting 'HideSplashScreen' with value 'true'
2025-08-06 19:45:48,999 DEBUG 21 OutlookGoogleCalendarSync.Forms.Splash [71] - Suppressing splash screen.
2025-08-06 19:45:49,029 DEBUG 1 OutlookGoogleCalendarSync.XMLManager [60] - Retrieved setting 'Version' with value '3.0.0.21'
2025-08-06 19:45:49,030 DEBUG 1 OutlookGoogleCalendarSync.Program [71] - Loading settings from file.
2025-08-06 19:45:49,090 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Proxy [64] - Removing proxy usage.
2025-08-06 19:45:49,118 INFO 1 OutlookGoogleCalendarSync.NotificationTray [45] - Using NodaTime TZDB: 2025b (mapping: $Revision$)
2025-08-06 19:45:49,119 DEBUG 24 OutlookGoogleCalendarSync.NotificationTray [92] - Checking for new timezone database...
2025-08-06 19:45:49,121 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [31] - Initialiasing MainForm.
2025-08-06 19:45:49,407 DEBUG 1 OutlookGoogleCalendarSync.Updater [37] - Automatic update check requested.
2025-08-06 19:45:49,411 DEBUG 9 OutlookGoogleCalendarSync.Updater [597] - Checking for Development Build ZIP update...
2025-08-06 19:45:49,424 DEBUG 24 OutlookGoogleCalendarSync.NotificationTray [108] - Already have latest TZDB version.
2025-08-06 19:45:49,538 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [76] - Configuring main form components.
2025-08-06 19:45:49,540 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [167] - Loading profiles.
2025-08-06 19:45:49,544 INFO 1 OutlookGoogleCalendarSync.Outlook.Factory [137] - Outlook Version: 1.0
2025-08-06 19:45:49,546 INFO 1 OutlookGoogleCalendarSync.Outlook.Factory [208] - Outlook product name: None
2025-08-06 19:45:49,552 DEBUG 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [234] - Changing active settings profile: Default
2025-08-06 19:45:49,561 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [346] - Find calendar folders
2025-08-06 19:45:49,562 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [385] - List Calendar folders
2025-08-06 19:45:49,565 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [1458] - List Calendar folders
2025-08-06 19:45:49,682 DEBUG 9 OutlookGoogleCalendarSync.Updater [612] - Finding Development Build release...
2025-08-06 19:45:49,683 INFO 9 OutlookGoogleCalendarSync.Updater [627] - Already on latest Development Build release.
2025-08-06 19:45:49,743 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [258] - Stop monitoring for Outlook appointment changes on profile: Default
2025-08-06 19:45:49,746 INFO 1 OutlookGoogleCalendarSync.Settings [485] - Logging level configured to 'Debug'
2025-08-06 19:45:49,754 INFO 1 OutlookGoogleCalendarSync.Settings [414] - C:\OGCS\settings.xml
2025-08-06 19:45:49,754 INFO 1 OutlookGoogleCalendarSync.Settings [415] - OUTLOOK SETTINGS:-
2025-08-06 19:45:49,755 INFO 1 OutlookGoogleCalendarSync.Settings [415] - Disconnect Between Sync: False
2025-08-06 19:45:49,755 INFO 1 OutlookGoogleCalendarSync.Settings [421] - GOOGLE SETTINGS:-
2025-08-06 19:45:49,755 INFO 1 OutlookGoogleCalendarSync.Settings [422] - Personal API Keys: False
2025-08-06 19:45:49,755 INFO 1 OutlookGoogleCalendarSync.Settings [423] - Client Identifier:
2025-08-06 19:45:49,755 INFO 1 OutlookGoogleCalendarSync.Settings [426] - Client Secret:
2025-08-06 19:45:49,755 INFO 1 OutlookGoogleCalendarSync.Settings [427] - API attendee limit in effect: False
2025-08-06 19:45:49,755 INFO 1 OutlookGoogleCalendarSync.Settings [428] - API attendee limit last reached: 1/1/2000 12:00:00 AM
2025-08-06 19:45:49,755 INFO 1 OutlookGoogleCalendarSync.Settings [430] - Assigned API key: 653617509806-2nq341ol8ejgqhh2ku4j45m7q2bgdimv.apps.googleusercontent.com
2025-08-06 19:45:49,756 INFO 1 OutlookGoogleCalendarSync.Settings [431] - PROXY:-
2025-08-06 19:45:49,756 INFO 1 OutlookGoogleCalendarSync.Settings [431] - Type: None
2025-08-06 19:45:49,757 INFO 1 OutlookGoogleCalendarSync.Settings [433] - Browser Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
2025-08-06 19:45:49,757 INFO 1 OutlookGoogleCalendarSync.Settings [443] - APPLICATION BEHAVIOUR:-
2025-08-06 19:45:49,757 INFO 1 OutlookGoogleCalendarSync.Settings [444] - ShowSystemNotifications: True; OnlyIfChange: False
2025-08-06 19:45:49,757 INFO 1 OutlookGoogleCalendarSync.Settings [445] - StartOnStartup: False; AllUsers: False; DelayedStartup: 0
2025-08-06 19:45:49,757 INFO 1 OutlookGoogleCalendarSync.Settings [446] - HideSplashScreen: True
2025-08-06 19:45:49,757 INFO 1 OutlookGoogleCalendarSync.Settings [447] - SuppressSocialPopup: False
2025-08-06 19:45:49,757 INFO 1 OutlookGoogleCalendarSync.Settings [448] - StartInTray: False
2025-08-06 19:45:49,757 INFO 1 OutlookGoogleCalendarSync.Settings [449] - MinimiseToTray: False
2025-08-06 19:45:49,758 INFO 1 OutlookGoogleCalendarSync.Settings [450] - MinimiseNotClose: False
2025-08-06 19:45:49,758 INFO 1 OutlookGoogleCalendarSync.Settings [451] - ShowSystemNotificationWhenMinimising: True
2025-08-06 19:45:49,758 INFO 1 OutlookGoogleCalendarSync.Settings [452] - Portable: True
2025-08-06 19:45:49,758 INFO 1 OutlookGoogleCalendarSync.Settings [454] - CreateCSVFiles: False
2025-08-06 19:45:49,758 INFO 1 OutlookGoogleCalendarSync.Settings [455] - VerboseOutput: True
2025-08-06 19:45:49,759 INFO 1 OutlookGoogleCalendarSync.Settings [458] - MuteClickSounds: False
2025-08-06 19:45:49,759 INFO 1 OutlookGoogleCalendarSync.Settings [459] - Logging Level: DEBUG
2025-08-06 19:45:49,759 INFO 1 OutlookGoogleCalendarSync.Settings [460] - Error Reporting: True
2025-08-06 19:45:49,759 INFO 1 OutlookGoogleCalendarSync.Settings [461] - Anonymise Logs: False
2025-08-06 19:45:49,759 INFO 1 OutlookGoogleCalendarSync.Settings [463] - Telemetry Disabled: False
2025-08-06 19:45:49,760 INFO 1 OutlookGoogleCalendarSync.Settings [464] - ABOUT:-
2025-08-06 19:45:49,760 INFO 1 OutlookGoogleCalendarSync.Settings [465] - Alpha Releases: True
2025-08-06 19:45:49,760 INFO 1 OutlookGoogleCalendarSync.Settings [466] - Skip Version:
2025-08-06 19:45:49,760 INFO 1 OutlookGoogleCalendarSync.Settings [467] - Skip Version2:
2025-08-06 19:45:49,760 INFO 1 OutlookGoogleCalendarSync.Settings [468] - Subscribed: 01-Jan-2000
2025-08-06 19:45:49,761 INFO 1 OutlookGoogleCalendarSync.Settings [470] - Timezone Database: 2025b
2025-08-06 19:45:49,761 INFO 1 OutlookGoogleCalendarSync.Settings [471] - ENVIRONMENT:-
2025-08-06 19:45:49,761 INFO 1 OutlookGoogleCalendarSync.Settings [472] - Current Locale: en-US
2025-08-06 19:45:49,761 INFO 1 OutlookGoogleCalendarSync.Settings [473] - Short Date Format: M/d/yyyy
2025-08-06 19:45:49,761 INFO 1 OutlookGoogleCalendarSync.Settings [474] - Short Time Format: h:mm tt
2025-08-06 19:45:49,762 INFO 1 OutlookGoogleCalendarSync.Settings [476] - System Time Zone: Eastern Standard Time; DST=True
2025-08-06 19:45:49,762 INFO 1 OutlookGoogleCalendarSync.Settings [476] - Completed Syncs: 0
2025-08-06 19:45:49,764 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [265] - CALENDAR SYNC SETTINGS
2025-08-06 19:45:49,765 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [267] - Profile: Default
2025-08-06 19:45:49,765 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [269] - Last Synced: 1/1/0001 12:00:00 AM
2025-08-06 19:45:49,766 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [270] - OUTLOOK SETTINGS:-
2025-08-06 19:45:49,766 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [270] - Service: Graph
2025-08-06 19:45:49,767 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [277] - Calendar: (ID: )
2025-08-06 19:45:49,767 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [278] - Category Filter: Include
2025-08-06 19:45:49,768 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [279] - Delete When Excluded: True
2025-08-06 19:45:49,768 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [280] - Categories: Category1,Category2,Category3,Category4
2025-08-06 19:45:49,768 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [281] - Only Responded Invites: False
2025-08-06 19:45:49,768 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [282] - Filter String: g
2025-08-06 19:45:49,769 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [284] - GAL Blocked: False
2025-08-06 19:45:49,769 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [285] - GOOGLE SETTINGS:-
2025-08-06 19:45:49,769 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [286] - Calendar:
2025-08-06 19:45:49,769 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [287] - Colour Filter: Exclude
2025-08-06 19:45:49,769 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [288] - Delete When Excluded: True
2025-08-06 19:45:49,770 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [289] - Colours:
2025-08-06 19:45:49,770 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [290] - Exclude Declined Invites: True
2025-08-06 19:45:49,770 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [291] - Exclude Goals: True
2025-08-06 19:45:49,770 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [292] - Include Google Meet: True
2025-08-06 19:45:49,770 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [294] - Cloak Email: True
2025-08-06 19:45:49,770 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [294] - SYNC OPTIONS:-
2025-08-06 19:45:49,770 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [297] - How
2025-08-06 19:45:49,771 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [298] - SyncDirection: Outlook → Google
2025-08-06 19:45:49,771 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [299] - MergeItems: True
2025-08-06 19:45:49,771 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [300] - DisableDelete: True
2025-08-06 19:45:49,771 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [301] - ConfirmOnDelete: True
2025-08-06 19:45:49,771 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [302] - SetEntriesPrivate: False
2025-08-06 19:45:49,771 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [303] - SetEntriesAvailable: False
2025-08-06 19:45:49,771 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [303] - SetEntriesColour: False
2025-08-06 19:45:49,773 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [317] - SingleCategoryOnly: False
2025-08-06 19:45:49,773 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [317] - Obfuscate Words: False
2025-08-06 19:45:49,773 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [327] - When
2025-08-06 19:45:49,773 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [328] - DaysInThePast: 1
2025-08-06 19:45:49,773 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [329] - DaysInTheFuture:60
2025-08-06 19:45:49,774 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [330] - SyncInterval: 0
2025-08-06 19:45:49,774 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [331] - SyncIntervalUnit: Hours
2025-08-06 19:45:49,774 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [332] - Push Changes: False
2025-08-06 19:45:49,774 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [333] - What
2025-08-06 19:45:49,774 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [334] - AddLocation: True
2025-08-06 19:45:49,775 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [335] - AddDescription: True; OnlyToGoogle: True
2025-08-06 19:45:49,775 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [336] - AddAttendees: False <200
2025-08-06 19:45:49,775 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [337] - AddColours: False
2025-08-06 19:45:49,775 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [338] - AddReminders: False
2025-08-06 19:45:49,775 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [339] - UseGoogleDefaultReminder: False
2025-08-06 19:45:49,775 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [340] - UseOutlookDefaultReminder: False
2025-08-06 19:45:49,776 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [341] - ReminderDND: False (22:00-06:00)
2025-08-06 19:45:49,776 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [342] - ExcludeFree: False
2025-08-06 19:45:49,776 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [343] - ExcludeTentative: False
2025-08-06 19:45:49,776 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [344] - ExcludePrivate: False
2025-08-06 19:45:49,776 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [345] - ExcludeAllDay: False; that are marked Free: False
2025-08-06 19:45:49,777 INFO 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [264] - ExcludeSubject: False
2025-08-06 19:45:49,831 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [57] - Initialise the timer(s) for the auto synchronisation
2025-08-06 19:45:49,832 DEBUG 1 OutlookGoogleCalendarSync.SettingsStore.Calendar [242] - Creating the calendar timer for auto synchronisation on profile: Default
2025-08-06 19:45:49,834 INFO 1 OutlookGoogleCalendarSync.Sync.SyncTimer [103] - Schedule disabled.
2025-08-06 19:45:50,044 INFO 1 OutlookGoogleCalendarSync.Forms.Main [1050] - Application window restored.
2025-08-06 19:45:50,198 WARN 12 OutlookGoogleCalendarSync.Exception [112] - Could not get IP geolocation.
2025-08-06 19:45:50,206 FAIL 12 OutlookGoogleCalendarSync.Exception [22] - System.Net.WebException: The remote server returned an error: (403) Forbidden.
2025-08-06 19:45:50,208 FAIL 12 OutlookGoogleCalendarSync.Exception [22] - Code: 0x80131509,-2146233079; Location: EndGetResponse() in MoveNext() at offset 364 in Telemetry.cs:100:21
2025-08-06 19:45:50,250 DEBUG 12 OutlookGoogleCalendarSync.Telemetry [202] - GA4: {"client_id":"55e0969ad8ab83689625a5df19593eac","user_id":"55e0969ad8ab83689625a5df19593eac","non_personalized_ads":true,"user_properties":{"ogcs_version":{"value":"3.0.0.21"},"benefactor":{"value":"True"},"account_present":{"value":"False"},"profiles":{"value":"1"},"outlook_version":{"value":null},"outlook_name":{"value":null},"continent":{"value":null},"country":{"value":null},"country_code":{"value":null},"region":{"value":null},"city":{"value":null}},"events":[{"name":"application_started","params":{"engagement_time_msec":1}}]}
2025-08-06 19:45:54,769 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [1418] - Retrieving Outlook calendar list.
2025-08-06 19:45:54,790 DEBUG 1 OutlookGoogleCalendarSync.Outlook.Graph.Calendar [42] - MS Graph service not yet instantiated.
2025-08-06 19:45:54,800 DEBUG 1 OutlookGoogleCalendarSync.Console [426] - <Outlook.Graph\O365Authenticator.cs:47> Authenticating with Microsoft
2025-08-06 19:45:55,164 DEBUG 11 OutlookGoogleCalendarSync.Outlook.Graph.Authenticator [86] - Authenticating with Microsoft Graph service...
2025-08-06 19:45:55,165 DEBUG 11 OutlookGoogleCalendarSync.Outlook.Graph.Authenticator [88] - Microsoft credential file location: C:\OGCS\Microsoft.Identity.Client.Extensions.Msal.TokenResponse-user
2025-08-06 19:45:55,166 INFO 11 OutlookGoogleCalendarSync.Outlook.Graph.Authenticator [91] - No Microsoft credentials file available - need user authorisation for OGCS to manage their calendar.
2025-08-06 19:45:55,320 WARN 11 OutlookGoogleCalendarSync.Outlook.Graph.Authenticator [114] - The user has not signed-in before or there is no account information in the cache.
2025-08-06 19:45:55,334 WARN 11 OutlookGoogleCalendarSync.Outlook.Graph.Authenticator [122] - Unable to acquire MS Graph token silently: No account or login hint was passed to the AcquireTokenSilent call.
2025-08-06 19:45:55,335 DEBUG 4 OutlookGoogleCalendarSync.Console [426] - <Outlook.Graph\O365Authenticator.cs:125> Preparing to authenticate with Microsoft.
2025-08-06 19:48:16,575 FAIL 7 OutlookGoogleCalendarSync.Outlook.Graph.Authenticator [142] - Problem acquiring MS Graph token interactively.
2025-08-06 19:48:16,575 WARN 24 OutlookGoogleCalendarSync.Console [420] - <Outlook.Graph\O365Authenticator.cs:68> Authorisation to allow OGCS to manage your Google calendar was cancelled.
2025-08-06 19:48:16,611 ERROR 1 OutlookGoogleCalendarSync.Exception [35] - System.ApplicationException: Microsoft handshake failed.
2025-08-06 19:48:16,695 ERROR 1 OutlookGoogleCalendarSync.Exception [22] - Code: 0x80131600,-2146232832; Location: get_GraphClient() in get_GraphClient() at offset 201 in O365Calendar.cs:50:21
2025-08-06 19:48:16,696 WARN 1 OutlookGoogleCalendarSync.Outlook.Graph.Calendar [1409] - Unhandled API exception.
2025-08-06 19:48:16,696 ERROR 1 OutlookGoogleCalendarSync.Exception [35] - System.ApplicationException: Microsoft handshake failed.
2025-08-06 19:48:16,696 ERROR 1 OutlookGoogleCalendarSync.Exception [22] - Code: 0x80131600,-2146232832; Location: get_GraphClient() in GetCalendars() at offset 274 in O365Calendar.cs:91:55
2025-08-06 19:48:16,697 DEBUG 1 OutlookGoogleCalendarSync.Extensions.MessageBox [75] - Outlook calendar retrieval failed: Failed to retrieve Outlook calendars.
Please check the output on the Sync tab for more details.
2025-08-06 19:48:16,761 INFO 1 OutlookGoogleCalendarSync.Forms.Main [1050] - Application window restored.
2025-08-06 19:48:20,181 INFO 1 OutlookGoogleCalendarSync.Forms.MsOauthConsent [36] - Picked rbEndOfRoad
2025-08-06 19:48:20,183 DEBUG 1 OutlookGoogleCalendarSync.Telemetry [202] - GA4: {"client_id":"55e0969ad8ab83689625a5df19593eac","user_id":"55e0969ad8ab83689625a5df19593eac","non_personalized_ads":true,"user_properties":{"ogcs_version":{"value":"3.0.0.21"},"benefactor":{"value":"True"},"account_present":{"value":"False"},"profiles":{"value":"1"},"outlook_version":{"value":null},"outlook_name":{"value":null},"continent":{"value":null},"country":{"value":null},"country_code":{"value":null},"region":{"value":null},"city":{"value":null}},"events":[{"name":"debug","params":{"engagement_time_msec":1,"MsOauthConsentCancelled":"rbEndOfRoad"}}]}
2025-08-06 19:48:21,047 DEBUG 1 OutlookGoogleCalendarSync.Extensions.MessageBox [90] - Response: OK
2025-08-06 19:48:21,055 ERROR 1 OutlookGoogleCalendarSync.Console [424] - <Forms\MainForm.cs:1434> Unable to get the list of Outlook calendars. The following error occurred:
2025-08-06 19:48:21,056 ERROR 1 OutlookGoogleCalendarSync.Console [424] - Microsoft handshake failed.
2025-08-06 19:48:21,101 DEBUG 1 OutlookGoogleCalendarSync.Forms.Main [1458] - List Calendar folders
2025-08-06 19:48:23,356 DEBUG 1 OutlookGoogleCalendarSync.Program [119] - Shutting down application.
2025-08-06 19:48:23,373 INFO 1 OutlookGoogleCalendarSync.Program [129] - Application closed.
OK, here's trying with setting some HTTP header user agent hints to indicate it's Windows 11....
:package: Hotfix v3.0.0.23.zip (see instructions for applying).
CRCs: Zip = 7C024F66 Exe = 34BA46D9
Do you have Duo Desktop installed/running? This article indicates it does not trust the browser HTTP headers anyway and it will use the Duo Desktop application to determine Windows 11 or 10. If Duo Desktop is not present, then it falls back to Windows 10, which would likely give the "Windows update required" prompt.
I don't have Duo desktop. I saw that article too but was confused by it, since I haven't got any issues with authenticating using Duo in any other applications, or browsers. I can try it and see if it helps, but I'm getting the feeling that the issue is coming from something else. I'll let you know what happens after installing Duo desktop.
Sent from my mobile device
From: Paul Woolcock @.> Sent: Thursday, August 7, 2025 7:58:12 PM To: phw198/OutlookGoogleCalendarSync @.> Cc: Dr. Daniel Smullen @.>; Author @.> Subject: Re: [phw198/OutlookGoogleCalendarSync] Calendar sign-in web view version issue (Issue #2154)
[https://avatars.githubusercontent.com/u/11843015?s=20&v=4]phw198 left a comment (phw198/OutlookGoogleCalendarSync#2154)https://github.com/phw198/OutlookGoogleCalendarSync/issues/2154#issuecomment-3166171739
Do you have Duo Desktop installed/running? This articlehttps://duo.com/docs/duo-desktop#windows-10-and-later indicates it does not trust the browser HTTP headers anyway and it will use the Duo Desktop application to determine Windows 11 or 10. If Duo Desktop is not present, then it falls back to Windows 10, which would likely give the "Windows update required" prompt.
— Reply to this email directly, view it on GitHubhttps://github.com/phw198/OutlookGoogleCalendarSync/issues/2154#issuecomment-3166171739, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAU4IS3FZ4DJ5B32T4XNA533MPRZJAVCNFSM6AAAAACBMGCUICVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTCNRWGE3TCNZTHE. You are receiving this because you authored the thread.Message ID: @.***>
Do you have Duo Desktop installed/running? This article indicates it does not trust the browser HTTP headers anyway and it will use the Duo Desktop application to determine Windows 11 or 10. If Duo Desktop is not present, then it falls back to Windows 10, which would likely give the "Windows update required" prompt.
Turns out I can't use Duo Desktop as it's a paid product that requires the corporate policy to enable it's use. My organization only uses Duo for 2FA. I think the problem lies elsewhere.
TBH at this stage, I'm not really sure what to suggest.
I haven't got any issues with authenticating using Duo in any other applications, or browsers
Do any of these applications authenticate through to your Microsoft account using OAuth? The issue here is that OGCS is using the Microsoft Authentication Library (MSAL) which doesn't really pass any HTTP headers at all by default (hence why it was saying the "browser" was out of date initially). I think we need to find out what traffic is being passed between Duo and OGCS (or a.n.other application you have for which OAuth works) using something like Fiddler - it's a pretty technical tool though...! I suspect Duo is needing some user agent client hints, but I don't know which ones or what values 🙁
I should be able to grab the request headers from any successful auth using Duo in my browser and that ought to do the trick, shouldn't it? I can then log out of that website afterwards and it should invalidate any sensitive session tokens that get passed along.
It turns out I don't even need to do the complete authentication flow, Duo always does the version check before it does the 2FA push. I had the order mixed up.
Here's the request headers for https://api-4a1b314b.duosecurity.com/frame/v4/auth/prompt?sid=frameless-d5d23b1f-a0c0-464d-855f-438ea59d61f5 -- the sid is obviously going to differ, as is the subdomain, but this is capturing a successful Duo push initiation for Outlook Web Access in my browser. I expect behind the scenes your webview will be doing something similar. The next step beyond this would be to accept the push message on my 2FA device, completing the authentication, but I can't get to this step in OGCS so I don't think that part will matter.
Here's the request:
{
"GET": {
"scheme": "https",
"host": "api-4a1b314b.duosecurity.com",
"filename": "/frame/v4/auth/prompt",
"query": {
"sid": "frameless-d5d23b1f-a0c0-464d-855f-438ea59d61f5"
},
"remote": {
"Address": "3.145.240.101:443"
}
}
}
Here's the request header contents:
{
"requestHeaders": {
"headers": [
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate, br, zstd"
},
{
"name": "Accept-Language",
"value": "en-US,en;q=0.5"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Cookie",
"value": "trc|DUCROGMD939YZGV1AUEV|DA6PWIIVG504EOYIRBUX=EPJL5FX4TTH0AKC3TZ3Q; hac|DUCROGMD939YZGV1AUEV|DA6PWIIVG504EOYIRBUX=\"MTc1NDQwMjk1NA==|1754402954|be5a4b8c301528203e296302d231ba2abdeb8623\"; lam|DIPB93GSQ6RKXE8PC5P7|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; lam|DIF32OXFFSUOETO8N8H7|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; lam|DI7VGXOBGLM4YQXKQ06E|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; lam|DIFIO7VF7O2BOBXW7C4X|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; lam|DI3W1IJQJCDY87TH577K|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; lam|DITU1JIZ8KBS22KFLCLD|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; lam|DIR0Q6SGQNHTK6KXGC9A|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; lam|DI6R34TVBYKKPZZ33WKT|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; lam|DI5WQ6LD0AR9NXUFMOHC|DUCROGMD939YZGV1AUEV=Duo_Push|DPEQ466ID36ZVYOZI6GP; sid|2562defc-020d-4d1e-a0c0-ffaab72b3502=\"NzEwODU4YjQ4NWE4NDMxNThlNWNmY2JjMWI5YTllYjI=|1755020111|fd8695ea6a9f9f3448b0f09974621d24f350a1fe\"; _xsrf|2562defc-020d-4d1e-a0c0-ffaab72b3502=\"MzIxYTg0MTU2M2QzNDc4ZTg4YjI2YzdiZGJhZGVlMzQ=|1755020111|034bf20ccb58e37e48f2dfa2ef38879b05a11148\"; sid|1a00b939-7f05-460d-b8f0-aa78f49564a3=\"NzQ5YzZlMGYwNzgzNDc3MWE2MDJiMzBkNjFiNTgyM2I=|1755020243|4b3ae6578808f38964362f097737cb204ded04d7\"; _xsrf|1a00b939-7f05-460d-b8f0-aa78f49564a3=\"NmQ3ZTZiMDZkZTlkNGE1MGExMmRmZjY0NWIwODZiOTM=|1755020243|5a70bda890e95cb2e4ee15c51af538fcedd5e740\"; sid|ac78eff5-f55a-400a-81bb-d0005f171e18=\"N2Y4MzQxZjM5OWVlNGFiMjljZGVhM2JlZTk5Mjc0ZDY=|1755020290|d356915f1ab804e888cad6dad68493005136c967\"; _xsrf|ac78eff5-f55a-400a-81bb-d0005f171e18=\"YjdiZTIwMDkxYjY0NGJjYmI3MWRmNDg5OTI5MDdkMGQ=|1755020290|31e3a26b4cf4e37316c80e6bc7606345a77b3794\"; sid|d5d23b1f-a0c0-464d-855f-438ea59d61f5=\"M2YzNjVmNzIwMWYzNDBiYzgxZDEwYTkzNTZkNmNjNjU=|1755020321|6d7d07428213d306807d756d4ee814515eec5d12\"; _xsrf|d5d23b1f-a0c0-464d-855f-438ea59d61f5=\"OWE0ZGFmMDFlMTVkNDA1MGFlNGE2NWRmM2YwNmRhNGM=|1755020321|2f1c3398992bfb754addb58b32546d6074c262a5\""
},
{
"name": "DNT",
"value": "1"
},
{
"name": "Host",
"value": "api-4a1b314b.duosecurity.com"
},
{
"name": "Priority",
"value": "u=0, i"
},
{
"name": "Referer",
"value": "https://api-4a1b314b.duosecurity.com/frame/frameless/v4/auth?sid=frameless-d5d23b1f-a0c0-464d-855f-438ea59d61f5&tx=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJESTdWR1hPQkdMTTRZUVhLUTA2RSIsImF1ZCI6Imh0dHBzOi8vYXBpLTRhMWIzMTRiLmR1b3NlY3VyaXR5LmNvbS9vYXV0aC92MS9hdXRob3JpemUiLCJqdGkiOiLDucOAw69XwrVZw7ZwccO6w4xXw4tDVcK6NEbDsVU2VXnDjUTDhsK1bUtow6zDtWXDo8O8RSIsImV4cCI6IjE3NTUwMjA2MjAiLCJjbGllbnRfaWQiOiJESTdWR1hPQkdMTTRZUVhLUTA2RSIsImR1b191bmFtZSI6ImN0bGludFxcZHNtdWxsZW4iLCJyZWRpcmVjdF91cmkiOiJodHRwczovL3N0cy5jYWJsZWxhYnMuY29tL2FkZnMvbHMvP2xvZ2luX2hpbnQ9ZC5zbXVsbGVuJTQwY2FibGVsYWJzLmNvbSZjbGllbnQtcmVxdWVzdC1pZD1hODFmM2Y5Mi00MGRlLTU0MmQtN2M1MC0xZjM0MWQwYTI0ZDAmdXNlcm5hbWU9ZC5zbXVsbGVuJTQwY2FibGVsYWJzLmNvbSZ3YT13c2lnbmluMS4wJnd0cmVhbG09dXJuJTNhZmVkZXJhdGlvbiUzYU1pY3Jvc29mdE9ubGluZSZ3Y3R4PWVzdHNyZWRpcmVjdCUzZDIlMjZlc3RzcmVxdWVzdCUzZHJRUUlBUkFBalZFX2JCSmhITDJQb3lkZ3JiU0xMcWJtMG9uazRMNEQ3Zy1Kc1JRb3BhMlVIcVd0R29QM1Z3N3UtSUR2b0pYSzdraTY2ZGpCR0Naak5HazZPWm9PaHJtRGRpUU9SaDBNb3hBWHg3Njh2THpoSmJfODNndVJNQXdUUy13X2NNeFVHZFkwSWFNWlVfY2ZXZ3VCNFBIOXhiZGZsNW1kRjRYRjJKM0EwbkFBNklyck5uQWlFa0Z0MTBhb0ZrYW1hV2xHbEktSE5lUkUwSUVTT1FWZ0NNQUlnR1BQTFQyTW5iWnRHX1ZsVFZGdHcxWlVQTTBOUEFJZkZTV1dod0tFa2dRNVh1SzRNQ2ZGVlY1UUZZWVhkSk9KaWJ6T2lLYkJNbEVWaWpISUtpTExDaGVlbTF2SnRsdmhwb0phVnRmNDdmR2JxT1dVR3dpN3I4bW5hUTBMR1pROFNDVlhaTlRPSHo3SXBFcmRhTFpvN2RYY2pob3JxUUoyazV1cC1xYTh2X0VzVy1fbXNydlZxcE9XTS1tYUxUUXozRmF6bGE4OE1sdnlxbGg0S0hmd0tzeEhjMVludnRiWmw0d091eklncjlUZWU1S2FfT21nLWpsSm9ZWlJ0X1NoRjF4NndYZnZMRXNtZkw1QWtMaE4zQ1hHWG5BeU15bjZJX05aRDJsejYyLS1GVV9rY1lnNG40bHNjUGxpRGVkMzJUaXVOa1QtZVZWc050QjJ1cG1FRFExdHk2eVZXc19oZ3NWRzlrcjNoQVRzVTZCUFVXZVUzMGNHQ1pwTUZlQ0lBajhwOFBJYWNlYV93bXJENi1CaU5oYWdORnV4SEx3UU9xSXR2ZXlpbWxHbkUwZjBvWVBMbWpaMUhjVnVHNWhPUEtZbkotZ252Vjd2MHcxaVBQZGw5T0hWcjlNX1A5YmVCWW5MQ2VlSjhYemY4eGMxJnB1bGxTdGF0dXM9MCIsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwic2NvcGUiOiJvcGVuaWQiLCJzdGF0ZSI6IlVWesOOVcOHNEbDuDLDk8OmbUHDq2k0SsOTw6_DuHE4ScO-SGnDjsODN0tpw5nDrsOAw5EiLCJ1c2VfZHVvX2NvZGVfYXR0cmlidXRlIjoidHJ1ZSJ9.oQ9UEkTVNEdXP3LgEukPW_6u72XK6XhpH2kL3pBhhx56O0gAIsaA_mbCOs3x-TlXsEhBEOPWR_iSWffb0MrblA"
},
{
"name": "Sec-Fetch-Dest",
"value": "document"
},
{
"name": "Sec-Fetch-Mode",
"value": "navigate"
},
{
"name": "Sec-Fetch-Site",
"value": "same-origin"
},
{
"name": "Sec-GPC",
"value": "1"
},
{
"name": "Upgrade-Insecure-Requests",
"value": "1"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:141.0) Gecko/20100101 Firefox/141.0"
}
]
}
}
I'm not sure how important the cookie is. I suspect it might be placing a cookie in order to perform fingerprinting, and if your webview window isn't capable of storing a cookie then Duo might potentially get upset. Probably all the Sec- headers are needed. As you can see the user agent is unchanged, but that is definitely necessary (according to what I've read, and based on the results of our troubleshooting thus far). I get the sense that the OS detection mechanism, unlike the browser detection mechanism, makes use of a variety of fingerprinting heuristics. Your webview will have to behave as much as possible like a real browser to not be detected as something weird and therefore assumed as "out of date" -- in addition to the cookie, the referrer string might also need to be preserved too.
Just to help you with debugging this, here's the response header, though I'm not sure it'll be very useful:
{
"responseHeaders": {
"headers": [
{
"name": "Cache-Control",
"value": "no-store"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "Content-Encoding",
"value": "gzip"
},
{
"name": "Content-Security-Policy",
"value": "default-src 'self'; frame-src 'self' com-duosecurity-devicehealth://*; img-src 'self' ux-asset-commercial.duosecurity.com ; connect-src 'self' ux-asset-commercial.duosecurity.com https://127.0.0.1:53100 https://127.0.0.1:53101 https://127.0.0.1:53102 https://127.0.0.1:53103 https://127.0.0.1:53104 https://127.0.0.1:53105 https://127.0.0.1:63100 https://127.0.0.1:63101 http://127.0.0.1:53106 http://127.0.0.1:53107 http://127.0.0.1:53108 http://127.0.0.1:53109 http://127.0.0.1:53110 http://127.0.0.1:53111 https://localhost:53100 https://localhost:53101 https://localhost:53102 https://localhost:53103 https://localhost:53104 https://localhost:53105 https://localhost:63100 https://localhost:63101"
},
{
"name": "Content-Type",
"value": "text/html; charset=UTF-8"
},
{
"name": "Date",
"value": "Tue, 12 Aug 2025 17:38:43 GMT"
},
{
"name": "Etag",
"value": "W/\"bac05e9257e8096d07c55314970421b05974742e\""
},
{
"name": "Pragma",
"value": "no-cache"
},
{
"name": "Server",
"value": "Duo/1.0"
},
{
"name": "Strict-Transport-Security",
"value": "max-age=31536000"
},
{
"name": "Transfer-Encoding",
"value": "chunked"
},
{
"name": "X-Content-Type-Options",
"value": "nosniff"
}
]
}
}
I poked around in O365Authenticator.cs and I have a few recommendations. Maybe, force MSAL to use a real system browser? In your AcquireTokenInteractive call, add: .WithUseEmbeddedWebView(false) which I believe forces it to open in the actual Edge/Chrome/Firefox window, with full DevTools, user extensions, and normal cookie handling.
Thanks for the PR and the pointers hopefully in the right direction 👍🏻
:package: Please have a go with hotfix v3.0.0.27.zip (see instructions for applying).
CRCs: Zip = C020D1FC Exe = A101C5AB
The centering on the active window didn't seem to be working for me, so I might remove that code. Also, after the first successful authentication, further attempts after disconnecting the account and re-retrieving the calendars seem to fail with "localhost refused to connect", though back in the OGCS application the calendars are populated in the dropdown. Restarting OGCS resolves this and the first auth works again, so I'm not quite sure what's going on here.
Checking a port opens up locally with netstat -ano | find "LISTEN", it seems to be listening on the right port, but still the browser error.
Anyway, fingers crossed it works with Duo!
It worked! I got past Duo and up to the prompt to request that my corporate IT grants access. There's a solid chance they'll reject it, but that's okay -- the functionality works all the same. I am still able to use OGCS on my main desktop PC through Outlook directly until they approve (or if they reject). Well done on the fix!
Glad we got there! Thanks for all your help, really very much appreciated 👍🏻 Did you get a response from IT granting/denying access?
Could you do me one last favour? I've stripped out some lines of code that I think are now redundant - if you could confirm authentication through Duo still works?
:package: Hotfix v3.0.0.28.zip (see instructions for applying).
CRCs: Zip = 63C0C73D Exe = D4FE7965
Confirming Duo authentication works just fine in this latest hotfix.
Unfortunately, my company's IT department is refusing access because OGCS (the app, not the website) doesn't have a privacy policy or terms of service with a data use policy. I can potentially help you write one up, my assessment of the code is that you aren't collecting any information other than the email addresses associated with the license to remove the nag screen from the application, but perhaps the creation of a proper privacy policy ought to be scoped to a different issue?
Edit: The IT folks also say that they won't approve an application that requires "persistent access" to mailboxes or calendars. My understanding is that there is no such persistent access needed if syncing at a set time interval, is that right?
Thanks for confirming so quickly 🙂
Interesting point on the privacy policy - the one hosted on the website is covering both the website and the application. It covers the email address as held for donors (and splash screen hiding), telemetry, anonymised analytics and the option to automatically submit log data upon error. Perhaps this could do with splitting out to two separate privacy policies?
For "persistent access", I guessing they are referring to the access scopes that the application requires - ie access to your calendars. I don't think OAuth scopes support expiry, only the access and refresh tokens expire after a period of time (60 minutes for the access token). At the moment, OGCS asks for read and write access scopes - I could potentially make that start with read-only access which would work for O->G, but any other sync direction would then need to elevate the scope to read-write. Would that help though?
For application scopes, you can revoke access at https://account.microsoft.com/privacy/app-access
For "persistent access", I guessing they are referring to the access scopes that the application requires - ie access to your calendars. I don't think OAuth scopes support expiry, only the access and refresh tokens expire after a period of time (60 minutes for the access token). At the moment, OGCS asks for read and write access scopes - I could potentially make that start with read-only access which would work for O->G, but any other sync direction would then need to elevate the scope to read-write. Would that help though?
For application scopes, you can revoke access at https://account.microsoft.com/privacy/app-access
I don't think you should make a change to the app's functionality, and I don't think that there is a need for a change to the mechanism of operation for the app with respect to how it integrates with M365.
To be honest, I think the problem is one which comes from the lack of a privacy policy (explicitly for the app) which defines precisely what data is used, why, and for how long. In general, I would be strongly supportive of the idea of breaking out the privacy policy and terms of service for the app itself. It would be here, in this separate policy, that you'd define what you're doing (and the rights that the user and/or their organization admins have to undo it). This would make it obvious to any IT department that there is no risk of leakage of potentially confidential data or the ability of the app to access data it shouldn't have access to. It would also be here in this policy that you'd make it clear and explicit that access (i.e., the oauth token) can be revoked at any time, and of course this access can also be revoked on behalf of the organization by organization admins/IT staff for organizational M365 accounts. I realize that this all seems quite obvious to a user of the app, but organization admins typically don't use these tools, and their evaluation doesn't go beyond looking at these documents (even though they're ostensibly only there for legal reasons anyway).
So yeah, in short, the patch here is just to add an explicit privacy policy doc for the app which says what you collect, why, what you don't do, and how to opt out of things.