Локально сохраненные учетные данные Google Drive API 3
Я создаю настольное приложение на C#. В первый раз, когда я запустил свое приложение, все прошло нормально, они попросили меня войти в систему и получить разрешение. Теперь я не могу войти с другой учетной записью, так как они сохранили все локально. Я попытался удалить файл в ~/.credentials/drive-dotnet-quickstart.json и да, это сработало, но снова только после того, как они восстановили учетные данные, но где-то еще и я не могу найти где. Я хочу иметь возможность войти в систему с другой учетной записи, и так как мне также нужно изменить область для разрешения проблемы, я должен удалить ранее сохраненные учетные данные. Вот как я вхожу.
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
Console.WriteLine(credential.ToString());
service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
Как я могу удалить сохраненные учетные данные? Как отключить механизм сохранения учетных данных?
Спасибо.
1 ответ
Просто удалите файл токена, который находится в папке "credPath"
Вы можете "Выйти", позвонив в ожидании credential.RevokeTokenAsync()
или используйте другой идентификатор пользователя в GoogleWebAuthorizationBroker.AuthorizeAsync
using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
var flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecretsStream = stream,
Scopes = new[] { DriveService.Scope.DriveReadonly },
DataStore = new FileDataStore(credPath, true)
});
credential = new UserCredential(flow, userId,
await flow.LoadTokenAsync(userId, CancellationToken.None)
);
bool res = await credential.RevokeTokenAsync(CancellationToken.None);
//credential = await GoogleWebAuthorizationBroker
// .AuthorizeAsync(
// stream,
// new[] { DriveService.Scope.DriveReadonly },
// userId,
// CancellationToken.None,
// new FileDataStore("oauth/drive"))
// ;
//Console.WriteLine("Credential file saved");
}
Чтобы проверить, существуют ли учетные данные в локальном
await new FileDataStore(credPath, true).GetAsync<TokenResponse>(userId) != null
//or
await flow.LoadTokenAsync(userId, CancellationToken.None) != null