diff --git a/src/GitHub.Api/Application/ApiClient.cs b/src/GitHub.Api/Application/ApiClient.cs index 10a01e0f3..21b047ea1 100644 --- a/src/GitHub.Api/Application/ApiClient.cs +++ b/src/GitHub.Api/Application/ApiClient.cs @@ -379,12 +379,19 @@ private async Task LoadKeychainInternal() logger.Trace("LoadKeychainInternal: Loading"); //TODO: ONE_USER_LOGIN This assumes only ever one user can login - var uriString = keychain.Connections.First().Host; + var connection = keychain.Connections.First(); + var uriString = connection.Host; var keychainAdapter = await keychain.Load(uriString); logger.Trace("LoadKeychainInternal: Loaded"); - return keychainAdapter.Credential.Token != null; + var keychainUsername = keychainAdapter.Credential?.Username; + if (keychainUsername == null || connection.Username != keychainUsername) + { + throw new TokenUsernameMismatchException(connection.Username, keychainUsername); + } + + return keychainAdapter.Credential?.Token != null; } logger.Trace("LoadKeychainInternal: No keys to load"); diff --git a/src/GitHub.Api/Authentication/Keychain.cs b/src/GitHub.Api/Authentication/Keychain.cs index 5e93f488c..69605e747 100644 --- a/src/GitHub.Api/Authentication/Keychain.cs +++ b/src/GitHub.Api/Authentication/Keychain.cs @@ -323,6 +323,6 @@ private void UpdateConnections(Connection[] conns) public Connection[] Connections => connections.Values.ToArray(); public IList Hosts => connections.Keys.ToArray(); public bool HasKeys => connections.Any(); - public bool NeedsLoad => HasKeys && !string.IsNullOrEmpty(FindOrCreateAdapter(connections.First().Value.Host).Credential.Token); + public bool NeedsLoad => HasKeys && string.IsNullOrEmpty(FindOrCreateAdapter(connections.First().Value.Host).Credential?.Token); } } \ No newline at end of file