gpt4 book ai didi

authentication - 为 Azure 中的移动服务使用 Facebook 进行身份验证

转载 作者:行者123 更新时间:2023-12-04 03:21:01 26 4
gpt4 key购买 nike

我在 Azure 中移动服务的 facebook 身份验证方面遇到问题。

更具体地说,我已经有一个正在使用 Facebook C# SDK 的应用程序它工作正常。我可以登录,获取我的 friend 列表等等。我想继续使用这个 SDK,但我也想为 Azure 移动服务进行身份验证。所以,我的计划是,使用 Facebook C# SDK 登录(我今天已经这样做了),获取身份验证 token ,并将其传递给 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 登录请求必须在请求正文中指定访问 token 。”

我找不到有关如何格式化访问 token 的任何信息,我尝试了很多不同的 key (而不是您在我的示例中看到的“authenticationToken”)。我也试过只传递 accesstoken 字符串,但似乎没有任何效果。此外,如果我使用 MobileServiceClient.LoginAsync() 进行全新登录,它工作正常,但强制用户登录两次似乎很愚蠢。

非常感谢任何帮助!

最佳答案

对象的预期格式是 {"access_token", "the-actual-access-token"}。使用 Facebook SDK 完成登录后,将在具有该名称的片段中返回 token ,这就是 Azure 移动服务所期望的。

顺便说一句,这是我根据您的代码段编写的有效代码。虽然它应该更好地处理失败的情况,但是对于 token 格式,这应该足够了

private void btnLoginFacebookToken_Click_1(object sender, RoutedEventArgs e)
{
var client = new Facebook.FacebookClient();
dynamic parameters = new ExpandoObject();
parameters.client_id = "MY_APPLICATION_CLIENT_ID";
parameters.redirect_uri = "https://www.facebook.com/connect/login_success.html";
parameters.response_type = "token";
parameters.display = "popup";
var uri = client.GetLoginUrl(parameters);
this.webView.LoadCompleted += webView_LoadCompleted;
this.webView.Visibility = Windows.UI.Xaml.Visibility.Visible;
this.webView.Navigate(uri);
}
async void webView_LoadCompleted(object sender, NavigationEventArgs e)
{
AddToDebug("NavigationMode: {0}", e.NavigationMode);
AddToDebug("Uri: {0}", e.Uri);
string redirect_uri = "https://www.facebook.com/connect/login_success.html";
bool close = (e.Uri.ToString().StartsWith(redirect_uri));
if (close)
{
this.webView.LoadCompleted -= webView_LoadCompleted;
this.webView.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
string fragment = e.Uri.Fragment;
string accessToken = fragment.Substring("#access_token=".Length);
accessToken = accessToken.Substring(0, accessToken.IndexOf('&'));
JsonObject token = new JsonObject();
token.Add("access_token", JsonValue.CreateStringValue(accessToken));
try
{
var user = await MobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);
AddToDebug("Logged in: {0}", user.UserId);
}
catch (Exception ex)
{
AddToDebug("Error: {0}", ex);
}
}
}

关于authentication - 为 Azure 中的移动服务使用 Facebook 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com