通用OAuth库C#

通用OAuth库C#,c#,api,twitter,linkedin,foursquare,C#,Api,Twitter,Linkedin,Foursquare,我想做什么: 在C#中编写一个通用库来处理每个服务的OAuth流(就像Twitter、LinkedIn和Foursquare)。最困难的部分是,我想模拟代码中的所有用户输入,这样就不需要用户操作就可以点击“Ok,i will Allow It”(确定,我将允许),甚至不需要写用户名/密码 到目前为止我的疑虑: 1-twitters API中的authenticity\u令牌的用法是什么 2-所有服务都使用哪些因素,以便实现OAuth流的一般用法。例如,我发现第一步很容易创建一个通用方法来执行。我

我想做什么:

在C#中编写一个
通用库来处理每个服务的OAuth流(就像Twitter、LinkedIn和Foursquare)。最困难的部分是,我想
模拟代码中的所有用户输入
,这样就不需要用户操作就可以点击“Ok,i will Allow It”(确定,我将允许),甚至不需要写用户名/密码

到目前为止我的疑虑:

1-twitters API中的
authenticity\u令牌的用法是什么

2-所有服务都使用哪些因素,以便实现OAuth流的一般用法。例如,我发现第一步很容易创建一个通用方法来执行。我所要做的就是更改webRequest的URL,然后BAM,我就有了请求令牌

3-如何获得每个服务的验证程序?例如,在
LinkedIn服务中,我能够解析一个页面来获取这个值,但是我找不到twitter API的
验证程序。即使在浏览器中授权我的应用程序,我在流程中也看不到任何HTML中的
Verifier
,或者任何生成它的JavaScript

观察结果:

1-我知道有很多OAuth库,比如or库,但是没有一个库允许我做我想做的事情,即验证和授权用户,而不提示任何用户输入

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

3-我也知道,这里还有我写过的其他帖子,几乎有同样的疑问,我重新发布的原因是想让它更清晰、更新鲜

4-对于任何英语错误或对概念的错误理解,请提前道歉

基本代码示例:

例如,这就是我用来获取任何服务的请求令牌的方法(在web上广泛使用)。我所要做的就是将
REQUEST\u TOKEN
值更改为用于服务的特定url,这样我就可以获得LinkedIn、Twitter或Foursquare的TOKEN。但我无法在其他步骤中应用相同的过程

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;
    }

不要

OAuth的设计目的是要求用户按下该按钮一次。如果您将其自动化,您的应用程序密钥将被吊销,并且您的程序将不再工作

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

没有一个网站正确执行OAuth将允许您绕过网站授权,有些网站将允许您通过查询传递用户名和密码并获取令牌,但如果他们有web授权,则必须让用户手动执行


如果你是OAuth提供商和消费者,你需要做Dropbox为他们的v0版API做的事情(我找不到任何指向他们旧API的链接,如果有人能找到的话,请编辑本文),该API将用户名和密码传递到一个特殊地址,该地址返回自动化令牌,而不使用网页。或者您需要使用与OAuth不同的身份验证方案。

您确定吗?所以,无论如何,我都没有必要这么做,是吗?因为,我上个月刚刚完成了linkedin,在没有提示任何用户输入的情况下连接了一个用户(用户名、密码)
这会让我成为黑客吗?
只是开玩笑,所以你是说我不能为每项服务都这样做?我不是提供者,我将是消费者,使用服务的API。OAuth SDK itseld不允许你这样做是有原因的,因为你不应该这样做,用户应该批准它。理论上,你只需要做一次。这可能不会让你成为黑客,但如果他们不提供API进行身份验证而不使用网页,而你绕过了它,你的应用程序将违反你在他们给你应用程序密钥时同意的协议。违反协议意味着你的应用程序密钥将被提取,如果被提取,你的任何用户都不能使用你的应用程序。您需要授权一次并保存令牌。如果您无法在该设备上授权,则需要在其他设备上授权,然后通过某种方式将令牌传输到该设备,以便稍后使用。请注意,LinkedIn使用条款不允许开放API应用程序收集用户名和密码,而不是使用OAuth。如果我们的法律团队注意到您的申请,您可能会被关闭。