通过 ServiceStack api 使用 Linq2Twitter 和缓存的 OAuth 令牌

Posted

技术标签:

【中文标题】通过 ServiceStack api 使用 Linq2Twitter 和缓存的 OAuth 令牌【英文标题】:Using Linq2Twitter and cached OAuth tokens withing a ServiceStack api 【发布时间】:2013-08-11 22:57:09 【问题描述】:

我想使用 Linq2Twitter 从用 ServiceStack 编写的 REST API 中进行 Twitter API 调用。

我有以下信息:

ConsumerKey ConsumerSecret 当用户在网站上验证我们的应用程序时缓存的 OAuth 令牌 当用户在网站上验证我们的应用程序时缓存的 OAuth TokenSecret

如何使用此信息创建 TwitterContext 以便进行 API 调用?我正在查看文档,并且看到了 WebForm、MVC、桌面示例,但没有针对我当前的用例。我不认为我可以使用 WebForm/MVC 的,因为如果令牌/令牌密码不正确,它们会尝试将用户重定向到授权页面。我查看了桌面示例,它使用了 pin 授权,我认为我也不能使用。

我知道,如果用户在我缓存了这些值后决定撤销访问权限,则令牌/令牌秘密可能是错误的,因此我需要一种方法来验证,如果失败则什么也不做。

【问题讨论】:

【参考方案1】:

这个问题并不完全相同,但授权人的概念可能对你很感兴趣:

How to use Linq to Twitter inside a web service?

本质上,您希望实例化一个授权方,将值分配给 Credentials 属性,如下所示:

    var auth = new SingleUserAuthorizer
    
        Credentials = new SingleUserInMemoryCredentials
        
            ConsumerKey = ConfigurationManager.AppSettings["twitterConsumerKey"],
            ConsumerSecret = ConfigurationManager.AppSettings["twitterConsumerSecret"],
            TwitterAccessToken = ConfigurationManager.AppSettings["twitterAccessToken"],
            TwitterAccessTokenSecret = ConfigurationManager.AppSettings["twitterAccessTokenSecret"]
        
    ;

然后,实例化您的 TwitterContext,如下所示:

    var ctx = new TwitterContext(auth);

在这种情况下,特定的授权者是 SingleUserAuthorizer,但您可以使用与获取原始凭据相同的授权者。只需提供所有 4 个凭据,LINQ to Twitter 将绕过用户重定向以在 Twitter 上进行授权。

【讨论】:

所以即使我的应用不是单用户应用,我也可以使用SingleUserAuthorizer?此外,它是否有办法检查访问令牌和机密是否仍然有效(并且用户尚未撤销访问权限) SingleUserAuthorizer 只是一个例子。您也可以使用与初始授权相同的授权人。关键是加载所有 4 个凭据。您可以进行 Account/VerifyCredentials (linqtotwitter.codeplex.com/…) 查询以查看您的应用程序是否仍然获得授权。 @JoeMayo 我有一个特殊的问题。我有一个 php 代码,它为我提供了 OAuth 对话框,我通过它登录。之后,我的 oauth 令牌和 oauth 令牌秘密保存在数据库中。现在我有一个 c# 任务,它会在一段时间内自动运行,比如 1 小时。该代码位于 .net 中,我正在将您的 linqtotwitter 与它集成。现在我的问题是我不会通过 linqtotwitter 授权用户,因为我已经使用 php 代码授权用户。在 singleuserauthorizer 中,如果我对所有值进行硬编码,它就可以正常工作。 但是可以有不同的用户,现在当我从数据库中获取令牌值和秘密时,它不会对我进行身份验证。 令牌和秘密都是不同的,我的意思是 dev.twitter.com 上有一个特别适用于我的应用程序。但是使用 php 保存在数据库中的令牌和秘密与网站上的不匹配

以上是关于通过 ServiceStack api 使用 Linq2Twitter 和缓存的 OAuth 令牌的主要内容,如果未能解决你的问题,请参考以下文章

ServiceStack.Redis:配置为使请求和响应类/ dto是同一类?

HttpClient 将 HTTP GET 请求流水线化到 ServiceStack API

通过 ServiceStack 运行多个 Redis Sentinel

C# Redis之ServiceStack

您可以通过命名管道自托管 ServiceStack 吗?

ServiceStack:添加 Blazor 支持?