Я создал мобильное приложение с серверной частью Azure и авторизую пользователей с помощью Google, Facebook, Microsoft и Twitter. Все это работает нормально, кроме Twitter.
Моя авторизация (в бэкенде) делается так:
[Authorize]
public class AuthenticationController : ApiController
{
[HttpGet, Route("api/getUserIdentity")]
public async Task<string> GetUserIdentity()
{
string requestUrl = "";
string userID = "";
try
{
FacebookCredentials credentials = await User.GetAppServiceIdentityAsync<FacebookCredentials>(Request);
requestUrl = "https://graph.facebook.com/me?access_token="
+ credentials.AccessToken;
userID = credentials.UserId;
}
catch (Exception) { } //if it is not facebook, will throw an exception here
if (requestUrl == "")
{
try
{
TwitterCredentials credentials = await User.GetAppServiceIdentityAsync<TwitterCredentials>(Request);
requestUrl = " https://api.twitter.com/oauth/access_token="
+ credentials.AccessToken;
userID = credentials.UserId;
}
catch (Exception) { }
}
if (requestUrl == "")
{
try
{
GoogleCredentials credentials = await User.GetAppServiceIdentityAsync<GoogleCredentials>(Request);
requestUrl = "https://www.googleapis.com/oauth2/v3/userinfo?access_token="
+ credentials.AccessToken;
userID = credentials.UserId;
}
catch (Exception) { }
}
if (requestUrl == "")
{
try
{
MicrosoftAccountCredentials credentials = await User.GetAppServiceIdentityAsync<MicrosoftAccountCredentials>(Request);
requestUrl = "https://apis.live.net/v5.0/me/?method=GET&access_token="
+ credentials.AccessToken;
userID = credentials.UserId;
}
catch (Exception) { }
}
if (requestUrl != "")
{
try
{
// Create an HttpClient request.
var client = new System.Net.Http.HttpClient();
// Request the current user info from Google.
var resp = await client.GetAsync(requestUrl);
Объект учетных данных, который я возвращаю, действителен с UserID и AccessToken.
Когда я вызываю GetAsync(...) с использованием URL-адреса запроса Twitter, я получаю исключение 404 (не найдено). На всякий случай я попробовал все URL-адреса, которые дает вам твиттер, но с тем же результатом. Но все остальные провайдеры авторизации работают нормально.
Я правильно ввел ключ и секрет API Twitter на портал Azure (нигде не было пробелов) и установил для уровня доступа приложения Twitter значение «Чтение», «Запись» и «Прямые сообщения». Имя пользователя и пароль учетной записи Twitter действительны, потому что я могу перейти прямо к учетной записи Twitter с начального экрана входа.
Поскольку это работает со всеми другими поставщиками аутентификации, я должен что-то здесь упустить. Любая помощь приветствуется.