【发布时间】:2018-08-20 16:29:08
【问题描述】:
我已经使用 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。
当我使用 Twitter 请求 URL 调用 GetAsync(...) 时,我收到 404(未找到)异常。为了更好地衡量,我尝试了 twitter 给你的所有 URL,但结果相同。但所有其他身份验证提供程序都可以正常工作。
我已将 twitter API 密钥和机密正确放入 Azure 门户(任何地方都没有空格),并将 Twitter 应用程序访问级别设置为读取、写入和直接消息。 Twitter 帐户的用户名和密码是有效的,因为我可以从初始登录屏幕直接进入 Twitter 帐户。
由于这适用于所有其他身份验证提供程序,因此我必须在这里遗漏一些东西。任何帮助表示赞赏。
【问题讨论】: