这篇文章{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进行身份验证?
谢谢!
答案 0 :(得分:3)
WP 7.0
Fragment
Url
中Url
出现问题(所有#之后都被截断)。 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常量