我在 Azure 中对移动服务进行 Facebook 身份验证时遇到问题。
更具体地说,我已经有一个使用Facebook C# SDK的应用程序,它运行良好。我可以登录,获取我的朋友列表等等。我想继续使用这个 SDK,但我也想对 Azure 移动服务进行身份验证。因此,我的计划是,使用 Facebook C# SDK 登录(就像我今天所做的那样),获取身份验证令牌,并将其传递给MobileServiceClient.LoginAsync() - 函数。这样,我仍然可以拥有 Facebook C# SDK 中的所有不错的功能,并且还可以使用 Azure 移动服务中的内置身份验证系统。
var client = new FacebookClient();
dynamic parameters = new ExpandoObject();
parameters.client_id = App.FacebookAppId;
parameters.redirect_uri = "https://www.facebook.com/connect/login_success.html";
parameters.response_type = "token";
parameters.display = "popup";
var loginUrl = client.GetLoginUrl(parameters);
WebView.Navigate(loginUrl);
加载完成后,执行以下操作:
FacebookOAuthResult oauthResult;
if (client.TryParseOAuthCallbackUrl(e.Uri, out oauthResult) && oauthResult.IsSuccess)
{
var accessToken = oauthResult.AccessToken;
var json = JsonObject.Parse("{\"authenticationToken\" : \"" + accessToken + "\"}");
var user = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook, json);
}
但是,当我调用上面的最后一行代码时,我得到了这个异常:MobileServiceInvalidOperationException,“错误:POST Facebook 登录请求必须在请求正文中指定访问令牌。”
我找不到有关如何格式化 accesstoken 的任何信息,我尝试了很多不同的密钥(而不是您在我的示例中看到的“authenticationToken”)。我也尝试过传递 accesstoken 字符串,但似乎没有任何效果。此外,如果我使用 MobileServiceClient.LoginAsync() 进行全新的登录,它工作得很好,但强迫用户登录两次似乎很愚蠢。
任何帮助是极大的赞赏!