-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Open
Labels
auth-issueAn issue authenticating to a hostAn issue authenticating to a host
Description
Version
2.6.1+786ab03440ddc82e807a97c0e540f5247e44cec6
Operating system
Other - please describe below
OS version or distribution
All
Git hosting provider(s)
Other - please describe below
Other hosting provider
generic
(Azure DevOps only) What format is your remote URL?
None
Can you access the remote repository directly in the browser?
Yes, I can access the repository
Expected behavior
When access token expires, after token refresh using refresh token, we should store new Refresh Token value.
Actual behavior
When access token expires, after token refresh using refresh token, current (revoked) Refresh Token value is stored. See:
Context.CredentialStore.AddOrUpdate(refreshService, refreshToken.Account, refreshToken.Password); |
It the other words, Refresh Token can be used only once.
Code
// Try to use a refresh token if we have one
ICredential refreshToken = Context.CredentialStore.Get(refreshService, userName);
if (refreshToken != null)
{
try
{
var refreshResult = await client.GetTokenByRefreshTokenAsync(refreshToken.Password, CancellationToken.None);
// Store new refresh token if we have been given one
if (!string.IsNullOrWhiteSpace(refreshResult.RefreshToken))
{
Context.CredentialStore.AddOrUpdate(refreshService, refreshToken.Account, refreshToken.Password);
}
// Return the new access token
return new GitCredential(oauthUser,refreshResult.AccessToken);
Context.CredentialStore.AddOrUpdate(refreshService, refreshToken.Account, refreshToken.Password);
should be replaces with:
Context.CredentialStore.AddOrUpdate(refreshService, refreshToken.Account, refreshResult.RefreshToken);
Metadata
Metadata
Assignees
Labels
auth-issueAn issue authenticating to a hostAn issue authenticating to a host