1

关键是,我有一个应用程序(我觉得有一半人已经知道这一点)从 Twitter(OAuth 1.0a)和 Facebook(OAuth 2.0 'ish)读取信息。

在 Twitter 版本中,我使用旧的 WebConsumer 类。它有一个 PrepareRequestUserAuthentication 函数,该函数还调用存储令牌的 ITokenManager.StoreNewRequestToken 函数。

我的问题是这在 WebserverClient 中是如何工作的,它的功能看起来都很相似,但似乎并没有以相同的方式运行。

            if (Application is FacebookApplication)
        {  // We need WebServerClient instead of WebConsumer so we can use OAuth 2.0
            client = new FacebookClient(this)
            {
                ClientIdentifier = Application.ConsumerKey,
                ClientSecret = Application.ConsumerSecret,
            };
            IAuthorizationState authorization = client.ProcessUserAuthorization();
            if (authorization == null)
            {
                client.RequestUserAuthorization(null, null, callback);
            }
        }
        else
        {   // Here we do need WebConsumer
            WebConsumer consumer = Application.GetConsumer(this) as WebConsumer;
            UserAuthorizationRequest authorizationRequest = consumer.PrepareRequestUserAuthorization(callback, requestParameters, redirectParameters);
            consumer.Channel.Send(authorizationRequest);
        }

目前我有一个 FacebookApplication 类和一个 TwitterApplication 类。两者都继承自 OAuthWebApplication ,其中包含具有 GetConsumer(IConsumerTokenManager tm) 函数以返回 OAuth 1.0 进程的 WebConsumer。我认为我还需要WebServerClient为 OAuth 2.0 流程添加 OAuth 2.0 吗?

4

1 回答 1

1

从来没有,因为 DotNetOpenAuth 中的 OAuth 2 客户端类甚至不使用令牌管理器。

OAuth 1 需要令牌管理器,因为客户端必须跟踪请求访问和接收访问的中间状态。但在 OAuth 2 中,客户端更简单,因为没有要存储的请求令牌——只有最终的访问令牌。

于 2012-06-06T14:38:12.530 回答