我有一个在 IIS 7.5 和 VS 2010 中运行的 WCF 服务。该服务有一些在内部使用Facebook C# SDK(版本 4.1,不是最新版本)的方法,以便从/向 Facebook 执行一些 GET 和 POST。由于 Facebook将很快删除offline_access
我必须处理访问令牌过期的情况。
我已经了解了执行身份验证的方式(为了获取代码并在获得访问令牌的代码之后),以便使用 Graph API 获取 Facebook 信息(如此处所示)。
我有两个问题:
- 当我的服务方法被调用并且我从我的数据库中检索适当用户的令牌时,有没有办法知道访问令牌是否过期?
我已经读过,当执行 Facebook API 调用并且访问令牌过期时,会引发以下异常:OAuthException
. 但是有没有更好的方法来检测到期?我不想
- 调用 Facebook API
- 处理异常
- 更新访问令牌,最后
- 使用新的访问令牌重复初始调用。
- 是否可以透明地更新用户的访问令牌(也将其存储在数据库中)并继续处理服务方法?在此资源中,缺少重要的(“更新访问令牌”)部分(声明为 [todo])
我想实现以下方案,在服务方法的实现中:
sc = SocialNetworkAccountDao.GetByUser(user)
isExpired = call method to check if the sc.token is expired.
if (isExpired)
{
newToken = call method for getting new access token
sc.token = newToken;
SocialNetworkAccount.Update(sc);
}
Facebook = new Facebook (sc.token)
Facebook.Post( ..... )
--
与QAuth
对话框通信的过程是异步的(执行重定向),与访问令牌 url 的通信以获取访问令牌是同步执行的。
最后一个问题:
- 有没有办法让服务方法等待我们从 Facebook 的请求/回调中检索到的新访问令牌,以便稍后继续使用新的访问令牌?