通用OAuth库C#

时间:2012-01-12 16:54:05

标签: c# api twitter linkedin foursquare

我正在尝试做什么:

编写Generic Library in C#来处理每个服务的OAuth流程(就像Twitter,LinkedIn和Foursquare一样)。最难的部分是,我希望simulate all the user input in code,以便不需要用户操作来点击“确定,我会允许它”,甚至编写用户名/密码等按钮。

怀疑我到目前为止:

1 - 在twitters API中使用authenticity_token是什么意思?

2 - 所有服务使用的因素是什么,以便我可以实现OAuth Flow的一般用法。例如,我发现第一步很容易使Generic方法执行。我所要做的就是更改webRequest的URL,而BAM,我有请求令牌。

3 - 如何获取每项服务的验证程序?例如,在LinkedIn Service中,我能够解析一个页面以获取此值,但我无法为twitter API找到此verifier。即使在浏览器中使用我的应用程序进行授权,我在流程中的任何HTML中都看不到Verifier,或者生成它的任何JavaScript。

观察:

1 - 我知道那里有很多OAuth库,比如thisthat,但是没有库可以让我做出我想要的东西,那就是认证并授权用户,而不提示任何用户输入。

2 - 无论如何,我不能要求用户输入。所有用于身份验证的用户名和密码等值都将被硬编码,每个用户都将使用相同的帐户来处理此请求。

3 - 我也知道,这里有其他帖子,我写的几乎有同样的疑问,而且我要重新考虑的原因是试图让它更清晰,更新鲜。

4 - 对于任何英语错误或提前对概念的误解感到抱歉。

基本代码示例:

例如,这是我使用的方法(可在国外广泛使用)获取任何服务的请求令牌。我所要做的就是将REQUEST_TOKEN值更改为用于服务的特定URL,因此我可以获取LinkedIn,Twitter或Foursquare的令牌。但我无法在其他步骤中应用相同的过程。

public string AuthorizationLinkGet()
    {
        string ret = null;

        string response = oAuthWebRequest(Method.GET, REQUEST_TOKEN, String.Empty);
        if (response.Length > 0)
        {
            //response contains token and token secret.  We only need the token.
            NameValueCollection qs = HttpUtility.ParseQueryString(response);

            if (qs["oauth_callback_confirmed"] != null)
            {
                if (qs["oauth_callback_confirmed"] != "true")
                {
                    throw new Exception("OAuth callback not confirmed.");
                }
            }

            if (qs["oauth_token"] != null)
            {
                ret = AUTHORIZE + "?oauth_token=" + qs["oauth_token"];
            }
        }
        return ret;
    }

1 个答案:

答案 0 :(得分:2)

<强>不即可。

OAuth旨在要求用户按一次该按钮。如果您将其自动化,您的应用程序密钥将被撤销,您的程序将不再有效。

您需要做的是在本地保存授权令牌并重复使用。用户单击“我允许”,然后重新使用授权令牌以进行将来的连接。你需要检查以确保它没有过期,如果是你只是重新授权,他们再次点击“我允许”。

没有正确执行OAuth的网站会允许您绕过网站授权,有些会允许您通过查询传递用户名和密码并获得令牌,但如果他们有网络授权,您必须让用户手动执行它

如果您是OAuth提供商和消费者,您需要做一些事情Dropbox为他们的API v0做了(我找不到任何链接到他们的旧API,如果有人能找到它编辑这篇文章),那就是通过了用户名和密码到一个特殊的地址,返回一个不使用网页的自动化令牌。或者您需要使用与OAuth不同的身份验证方案。