为extendAccessToken使用保护应用程序密钥

时间:2012-03-03 20:41:10

标签: facebook-android-sdk facebook-access-token app-secret

我正在为Android开发,目前使用facebook-android-sdk进行身份验证。 从我所看到的,在该代码中没有使用app秘密,这很棒。

现在Facebook要删除offline_access权限,我需要扩展访问令牌。不幸的是,sdk的extendAccessToken方法并不孤立,需要安装官方Facebook应用程序,这对我来说是不可接受的。

所以我决定直接实现extendAccessToken(类似于iphone sdk实现)。 问题是扩展访问令牌的HTTP请求需要client_secret字段,这意味着我需要将app秘密放在代码本身中。对于可以轻松进行逆向工程的Android / Java应用程序来说,这一点都不安全。

还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

为什么不在自己的服务器上托管执行此操作的代码,让客户端通过调用服务器来扩展令牌?

答案 1 :(得分:0)

所以这就是我迄今为止发现的有关生成/扩展令牌的Android / iOS sdks的内容。

我找到了2种使用SDK和3种方法生成令牌客户端的方法来扩展令牌。

生成:

1)Facebook应用程序。生成SSO令牌

2)Web浏览器(iOS)/ Web对话框(Android / BB)。在iOS上生成SSO令牌,在Android / BB上生成非SSO令牌

这些代币都是长期代币。

扩展:

1)iOS / Android应用。在Android情况下,仅当用户登录到应用程序时,否则对绑定服务的调用永远不会返回任何内容,甚至不会返回错误。尚未针对该场景测试iOS。

2)auth.extendSSOAccessToken。这是旧API的端点,据我所知,如果官方应用程序不存在,iOS SDK仍会使用。现在,如果您在未使用SSO(Android弹出对话框)生成的令牌上使用此端点,则会收到错误代码10,其中包含一个msg,告知您未使用SSO生成令牌。这可能会导致您怀疑只要您的令牌是通过SSO生成的,它就可以正常工作。您的怀疑是错误的,它会给您一个错误代码100,其中包含“未提供Facebook应用程序的访问令牌”。据我所知,这使得这种方法在Android上完全没用。

3)oauth / access_token。这是FB告诉我们在roadmap中使用的端点。当然这个方法a)通过apk反编译/解包来暴露你的APP_SECRET(FB强烈建议不要)和b)仅用于将短期令牌扩展为长期令牌。因此,如果您开始使用长期令牌(这是在Android / iOS上返回的默认令牌),您需要先生成一个短期令牌,然后使用此方法客户端(不安全)或服务器端(不是为了所有人)。如何从长期令牌中生成短期令牌?希望我知道=(。

到目前为止,还没有找到任何想法来实现这一点。如果有人知道,请分享!

这至少可以为服务人员提供一种安全的方法来延长长期令牌。