#c# #gmail #gmail-api #gmail-imap #mailkit
Вопрос:
Я пытался использовать Mailkit и OAuth для чтения почтового ящика Gmail пользователя и следовал образцу кода, приведенному в часто задаваемых вопросах Mailkit. Для протокола, вот код, который я использую…
Обратите внимание, что в настоящее время я храню токен в файле в корневом каталоге содержимого сайта, пока это не заработает. После этого я буду внедрять хранилище идентификаторов Entity Framework, поэтому, пожалуйста, не беспокойтесь о проблеме безопасности кода, показанного здесь
private async Task<ImapClient> GetMailClientOAuth(string account, string clientId, string clientSecret) {
ClientSecrets clientSecrets = new() {
ClientId = clientId,
ClientSecret = clientSecret
};
GoogleAuthorizationCodeFlow codeFlow = new(new GoogleAuthorizationCodeFlow.Initializer {
DataStore = new FileDataStore($@"{_env.ContentRootPath}{account}"),
Scopes = new[] { "https://mail.google.com/" },
ClientSecrets = clientSecrets
});
LocalServerCodeReceiver codeReceiver = new();
AuthorizationCodeInstalledApp authCode = new(codeFlow, codeReceiver);
UserCredential credential = await authCode.AuthorizeAsync(account, CancellationToken.None);
if (authCode.ShouldRequestAuthorizationCode(credential.Token)) {
await credential.RefreshTokenAsync(CancellationToken.None);
}
SaslMechanismOAuth2 oauth2 = new(credential.UserId, credential.Token.AccessToken);
ImapClient client = new();
await client.ConnectAsync("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
await client.AuthenticateAsync(oauth2);
return client;
}
Код отлично работал в приложении для тестовой консоли, и сейчас я пытаюсь интегрировать код в свой ASP.NET Основное веб-приложение.
Я создал веб-проект на своей панели управления Google Cloud, добавил API Gmail и создал учетные данные OAuth, как и для консольного приложения.
Когда я пытаюсь ввести код для доступа к Gmail, в моем браузере появляется окно с сообщением…
Ошибка Авторизации
Ошибка 400: перенаправление_ури_мисматч
URI перенаправления в запросе, http://localhost:54392/authorize/, не соответствует тем, которые авторизованы для клиента OAuth
Теперь я понятия не имею, где он появился http://localhost:54392/authorize/, так как он не имеет никакого сходства ни с чем, что я использую (не то, чтобы я давал ему какой-либо URL-адрес в любом случае), но я перешел по ссылке, которая была в сообщении, и установил URL-адрес, который находится на моем веб-сайте (при запуске на моем локальном компьютере).
Я дважды проверил, что этот URL-адрес был сохранен с учетными данными, но когда я пытаюсь получить доступ к странице на своем сайте, я получаю ту же ошибку с тем же URL-адресом, который, по его мнению, должен быть там.
Я проверил идентификатор клиента и секрет, и я определенно использую правильные.
Кто-нибудь знает, куда это ведет http://localhost:54392/authorize/ от, и как я говорю ему использовать что-то другое?
Спасибо
Ответ №1:
Не уверен, правильно ли это, но я решил эту проблему, установив тип проекта в настольное приложение, для которого не требуется URI перенаправления.
Комментарии:
1. Спасибо, это было просто!