facebook-c#-sdk Windows Phone 7身份验证 - 为什么这个秘密?

时间:2011-12-31 00:15:36

标签: facebook windows-phone-7 facebook-c#-sdk

这篇文章{AppSecret with Windows Phone 7} 表示WP7示例不使用AppSecret从Windows Phone登录,但5.3.2下载中的当前示例确实使用了该秘密。

但是,如果没有提供,则FacebookOAuthClient.cs会抛出异常。另外,http://blog.prabir.me/post/Facebook-CSharp-SDK-Writing-your-first-Facebook-Application.aspx 显示不使用AppSecret的示例。

阅读Facebook开发者文档时,似乎秘密是用于后台(网络服务器)授权给Facebook而不是客户端应用程序,并且这是一种糟糕的做法,可能是不安全的,并且可能会在您的客户端应用程序中包含您的秘密。 / p>

我是否误解了指导,或者有没有办法在不使用秘密的情况下使用facebook-c#-sdk进行身份验证?

谢谢!

3 个答案:

答案 0 :(得分:3)

WP 7.0 Fragment UrlUrl出现问题(所有#之后都被截断)。 Facebook在Fragment AppSecret中返回身份验证令牌,因此如果没有它,则无法像桌面/移动应用程序那样进行身份验证。解决方案是切换到Web模式,如果您知道WP 7.1,则可以在此模式下接收身份验证令牌,因此它是唯一的解决方案(但存在安全漏洞)。

Fragment Url AppSecret错误已关闭,现在您可以使用正常的身份验证模式(客户端没有{{1}})。

答案 1 :(得分:0)

如果您可以访问我的任何内容而不首先让我授权应用程序(仅使用没有访问令牌或应用程序机密的应用程序ID),那么这将是一个巨大的安全漏洞。不仅是我的个人资料,还有应用程序ID公开的任何应用程序。

简短的回答是,您需要拥有一个用户(或其他类型)访问令牌或应用程序机密来获取信息。

答案 2 :(得分:0)

我发现问题不在于SDK,而是包含了Windows Phone 7示例。该示例使用服务器端流程。该示例所需的更改是:

变化:

loginParameters["response_type"] = "code";

为:

loginParameters["response_type"] = "token"; 

并删除webBrowser1_Navigated中的整个labda函数:
...

// The url is the result of OAuth 2.0 authentication.
if (oauthResult.IsSuccess)
  {
    var oauthClient = new FacebookOAuthClient { AppId = AppId, AppSecret = AppSecret };

    // we got the code here
    var code = oauthResult.Code;
   oauthClient.ExchangeCodeForAccessTokenCompleted +=
       (o, args) =>
       {
...

并将其替换为:

if (_fLoginMode && oauthResult.IsSuccess && !string.IsNullOrEmpty(oauthResult.AccessToken))
  {
      Dispatcher.BeginInvoke(() => NavigationService.Navigate(new Uri("/FacebookInfoPage.xaml?access_token=" + oauthResult.AccessToken, UriKind.Relative)));
  }

当然,删除AppSecret常量