如何从Silverlight安全进行Facebook身份验证?

时间:2010-06-13 13:13:11

标签: silverlight security facebook

我想要完成以下场景:

  • 网站运行一些HTTP(S)服务 返回用户的数据。
  • 同一个网站还有一个Silverlight 4应用程序,它可以调用这些 服务。
  • Silverlight应用程序正在使用Facebook Developer Toolkit(http://facebooktoolkit.codeplex.com/)与Facebook集成。

我还没有完全确定我是否希望Facebook集成成为Spotify等“选择加入”选项,或者我想通过仅限Facebook身份验证来“锁定”我的服务。那是另一个讨论。

如何保护我在Silverlight应用中从Facebook收到的API密钥和密钥?对我来说很明显,这是不可能的,因为代码在客户端运行,但有没有办法让我更难,或者我应该忍受第三方可能“行动”作为我自己的应用程序的事实?

使用Facebook Developer Toolkit,Silverlight中有以下C#方法,当用户使用Facebook Connect API对Facebook进行完全身份验证时,该方法是从JavaScript执行的。

    [ScriptableMember]
    public void LoggedIn(string sessionKey, string secret, int expires, long userId)
    {
        this.SessionKey = sessionKey;
        this.UserId = userId;

显然这里的问题是JavaScript注入了userId,这只是一个简单的数字。这意味着任何人都可能在JavaScript中注入不同的userId并让我的应用程序认为它是其他人。这意味着有人可能会劫持我网站上运行的服务中的数据。

我想到的另一种方法是对我网站上的用户进行身份验证,这样我就不会泄露任何秘密,我可以在初始身份验证后向用户返回auth-cookie。虽然这种情况在用户在本地而不是从我的网站运行Silverlight应用程序的浏览器外情况下效果不佳。

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,这是我的工作:

  1. 在ASP.NET或MVC中执行身份验证
  2. 将AccessToken(字符串)传递给SL App的参数。
  3. 使用SL中的AccessToken创建新的FB App对象。
  4. 访问令牌不会泄露您的信息,但它确实为您提供了Silverlight中的UserID和API调用访问权限。最糟糕的情况是有人试图弄乱AccessToken,但FB可能追溯到最初分配给令牌的用户。

    http://facebooksdk.codeplex.com/

答案 1 :(得分:0)

我不会在您的Silverlight应用中添加API Secret。您需要通过调用服务器来找到一种方法。

我承认我不太了解Facebook Connect API,我很快就会关注它,因为我需要为我的Silverlight应用做类似的事情。