我应该如何在客户网站上授权推特?

How should I authorize twitter on a clients website?

我正在我正在使用的网站上使用 Linq-to-twitter。我只想抓住我客户的最新推文并将其列在网站上。

我已经在自己的 Twitter 帐户中为客户创建了一个应用程序。

我不知道应该使用 Single User Authentication 还是 Application Authentication

从表面上看,Application Authentication 似乎是正确的,但我不确定过程。我是否设置一个页面,我的客户可以在其中授权应用程序然后存储令牌?文档中不清楚该令牌是否会过期。

或者我应该使用 Single User Authentication 并使用在我自己的 Twitter 帐户中生成的令牌?如果该站点被传递给其他人进行工作并且他们获得了令牌,这是否有任何缺点或安全风险? (我确实将应用程序设置为只读,但这是我第一次使用 Twitter,所以我不确定)

我很困惑,请多多指教。

应用程序身份验证很有吸引力,因为它可以为您提供更多请求。但是,并非所有查询都允许应用程序身份验证,因为查询是代表用户进行的,而应用程序身份验证是非用户特定的。如果您有一个代表用户的查询(就像该用户已登录一样),单用户授权将是合适的。

LINQ to Twitter 在可下载的源代码中有演示,包括 ASP.NET WebForms 或 MVC。这些演示假定用户正在执行 OAuth 授权序列。但是,如果您使用应用程序或单用户授权,您需要做的就是加载凭据并使用 TwitterContext 而无需让用户完成该过程。控制台演示有每种授权类型的示例。

这是实例化 ApplicationOnlyAuthorizer 的示例:

var auth = new ApplicationOnlyAuthorizer()
{
    CredentialStore = new InMemoryCredentialStore
    {
        ConsumerKey = ConfigurationManager.AppSettings["consumerKey"],
        ConsumerSecret = ConfigurationManager.AppSettings["consumerSecret"]
    },
};

下面是 SingleUserAuthorizer 的示例:

var auth = new SingleUserAuthorizer
{
    CredentialStore = new SingleUserInMemoryCredentialStore
    {
        ConsumerKey = ConfigurationManager.AppSettings["consumerKey"],
        ConsumerSecret = ConfigurationManager.AppSettings["consumerSecret"],
        AccessToken = ConfigurationManager.AppSettings["accessToken"],
        AccessTokenSecret = ConfigurationManager.AppSettings["accessTokenSecret"]
    }
};

所有凭据均来自 Twitter 帐户中的应用程序页面。

无论哪种情况,都会加载凭据,因此您无需让用户完成 OAuth 流程,只需创建一个新的 TwitterContext,如下所示:

await auth.AuthorizeAsync();
var twitterCtx = new TwitterContext(auth);

令牌不会过期。因此,您可以在每次实例化授权方时重新加载相同的令牌。

您可以使用以下一种方法来最大程度地降低共享凭据的安全风险。使用客户的用户帐户或代表客户创建新的用户帐户。然后在客户帐户下创建一个应用程序并使用这些凭据。您可以授予客户对新帐户的访问权限,他们将对自己的凭据负责。