检索利用社会框架的Twitter OAuth令牌(iOS6的)(Retrieving Twitter

2019-08-16 23:10发布

我是使用iOS的社会框架Twitter的OAuth令牌怎么会有点困惑。 假设我有一个iOS6的Facebook和Twitter帐户设置,我可以得到ACAccount。 当我检查ACAccountCredential为Facebook ACAccount的OAuthToken属性设置但对于Twitter的ACAccount事实并非如此。 所有其他明细对Twitter的ACAccount设置只是ACAccountCredential是没有的。

要添加到我读到一篇文章,来使用反向验证得到OAuth令牌(混乱https://dev.twitter.com/docs/ios/using-reverse-auth )。 这篇文章呼吁会谈https://api.twitter.com/oauth/request_token并传入oauth_的字典* PARAMS PARAMS如CONSUMER_KEY,nononce,等等。但是,我肯定ACAccount连接到SLRequest服务于这一目的? 在任何情况下,我回去“无法验证的OAuth签名和令牌”当我尝试这个错误。

所以我的问题是我应该看到Twitter的OAuth令牌在ACAccountCredential,或者我应该使用反向验证? 如果是的话,我需要明确的传中的NSDictionary包含oauth_ * params中,被安装在ACAccount是否足够?

Answer 1:

让我们来回答这几个步骤,有需要解决/澄清一些事情。

ACAccountCredential

这个目的是在协调使用具有ACAccount对象,为了使帐户框架,以便能够针对特定帐户认证所述用户。 它的目的不是随意读取; 它应该只是一个用来当你需要一个帐户保存到帐户框架。

从Twitter文件指出,需要填充的ACAccountCredential如果你迁移到帐户框架来管理您的用户帐户,而不是使用自己的服务器,或者在老年的iOS应用程序的情况下,本地管理自己的帐户。

苹果公司在其文档中清楚地说 ,经过该帐户已被保存到帐户框架的凭据无法被读取。

出于保护隐私的原因,该帐户被保存后该属性是不可访问。

因此,这就是为什么Twitter的提供利用反向验证的能力,如果你仍然需要OAuth令牌服务器侧管理的原因。 我不知道为什么你能得到它的Facebook账号,但Twitter并不能直接跳转到保存ACAccountCredential预定。

使用Twitter的反向验证

由Twitter(在你的问题的链接)所提供的文件使得程序上,你需要以访问OAuth访问令牌的事还算清晰,但我会尽力澄清一些事情可能不是那么清楚。

有需要额外的框架,除了帐户和Twitter的框架,以使这项工作; Social.framework 。 确保这是进口的,因为这会令请求令牌简单得多。

至于你需要发送请求,微博不知道ACAccounts的。 请记住这个反向身份验证过程不具体到iOS,它可以通过任何计算设备能够访问网络来完成。 这样,就需要发送HTTP POST请求https://api.twitter.com/oauth/request_token使用指定的参数(OAuth的标准那些+ x_auth_mode )。 所要求的参数多一点清晰度可以在这里找到 ,但在你的问题的链接也将需要哪些参数清晰。 你将被要求提供自己的随机数和其他参数值。

您可以使用SLRequest类或AFNetworking让你的POST请求到Twitter,在一个NSDictionary通过为您的参数值(如Twitter的文档中的代码示例中所看到access_token )。

这就是它

回答这两个点之后,我想很明显,你需要以访问正确的OAuth令牌您需要使用反向认证。 Twitter的文档,使得它在你需要做的(它甚至提供了可以使用代码样本)明确,但你必须要知道一般的OAuth请求/响应管理,才能做到这一点。 你不能简单地附加一个ACAccount,你需要填充所需的OAuth参数的字典,然后在它传递给你的HTTP POST请求request_token 。 我已经提供了相当数量的,供你参考以引用的,我希望会放你在正确的道路上。



Answer 2:

假设你要试试这件> = 5.0的iOS,这里有一个简单的方法来获得访问令牌。 无论您是否使用Twitter.framework或Social.framework,两者的工作是做请求签名适合自己的方式。 我们用两种TWRequest或SLRequest创建您的要求。 一旦我们完成这件事,我们从以下任一中的NSURLRequest对象。

这里的窍门是看这个的NSURLRequest的头。 因为我们必须指定,按照OAuth的标准,一些OAuth的参数组oauth_token就是其中之一,它应该很容易提取出来。 下面是一个办法让这一点。

NSURLRequest * reqTemp = /* Prepare the request using either Twitter.framework or Social.framework */;
NSDictionary * dictHeaders = [reqTemp allHTTPHeaderFields];

NSString * authString = dictHeaders[@"Authorization"];
NSArray * arrayAuth = [authString componentsSeparatedByString:@","];
NSString * accessToken;
for( NSString * val in arrayAuth ) {
    if( [val rangeOfString:@"oauth_token"].length > 0 ) {
        accessToken =
            [val stringByReplacingOccurrencesOfString:@"\""
                                           withString:@""];
        accessToken =
            [accessToken stringByReplacingOccurrencesOfString:@"oauth_token="
                                                        withString:@""];
        break;
    }
}

可能是这段代码可以优化更多,但你的想法。 变量的accessToken将有实际的访问令牌。



Answer 3:

其实如果你唯一担心的是检索OAuth令牌,还有访问此用一个非常简单的方式Social框架。 文档,里面放着一个调用的方法:

func preparedURLRequest() -> NSURLRequest!

返回值的OAuth的兼容的NSURLRequest对象,它允许应用程序以代表该用户的同时保持用户的密码保密。 该的NSURLRequest作为您好!OAuth1默认情况下,或OAuth2用户通过将基于用户的帐户相应的令牌签名。

讨论使用此方法发送之前修改您的请求。 通过设定正确的帐户,这个方法会自动添加任何必要的标记。

所以,你可以只简单地创建一个签署SLRequest是这样的:

let accounts = self.accountStore.accountsWithAccountType(type)
let request = SLRequest(
                forServiceType: SLServiceTypeTwitter,
                requestMethod: .GET,
                URL: NSURL(string: "https://api.twitter.com/1.1/account/verify_credentials.json"),
                parameters: ["include_entities": true])      
request.account = accounts?.first as? ACAccount

而现在只需访问request.preparedURLRequest().allHTTPHeaderFields()你会看到oauth_token在里面。

然而,你将不会有秘密令牌(因为它是用来生成oauth_signature按照Twitter的文档 ),这使得该服务器侧管理好看不中用。



Answer 4:

看看这个项目https://github.com/seancook/TWReverseAuthExample 。 这里是做这项工作对你TWAPIManager类。



文章来源: Retrieving Twitter OAuth Token using Social Framework (iOS6)