本文介绍了Vimeo 集成到 ios oauth 2.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们使用 oauth 1.0 集成了 vimeo.现在它不起作用,必须使用 oauth 2.0.我找到了 https://github.com/nxtbgthng/OAuth2Client.但是不明白vimeo怎么用.

We had vimeo integrated using oauth 1.0. Now its not working and have to use oauth 2.0.I found https://github.com/nxtbgthng/OAuth2Client. But do not understand how to use it for vimeo.

我们之前的代码是

OADataFetcher *fetcher;
    consumer = [[OAConsumer alloc]initWithKey:[dicVimeoInfo objectForKey:@"ConsumerKey"] secret:[dicVimeoInfo objectForKey:@"ConsumerSecret"]];

    NSURL *vimeoURL=[NSURL URLWithString:kVimeoRestURL];

    OAToken *token=[[OAToken alloc]initWithKey:[dicVimeoInfo objectForKey:@"AccessToken"] secret:[dicVimeoInfo objectForKey:@"AccessTokenSecret"]];

    request = [[OAMutableURLRequest alloc] initWithURL:vimeoURL
                                              consumer:consumer
                                                 token:token
                                                 realm:nil
                                     signatureProvider:nil];

    OARequestParameter* formatparameter = [OARequestParameter requestParameter:@"format" value:@"json"];
    OARequestParameter* methodParameter = [OARequestParameter requestParameter:@"method" value:@"vimeo.channels.getAll"];


    NSArray *params = [NSArray arrayWithObjects: formatparameter, methodParameter, nil];
    [request setParameters:params];

    [request setHTTPMethod:@"GET"];
    [request prepare];
    fetcher = [[OADataFetcher alloc] init];

    [fetcher fetchDataWithRequest:request
                         delegate:self
                didFinishSelector:@selector(requestTokenTicket:didFinishWithData:)
                  didFailSelector:@selector(requestTokenTicket:didFailWithError:)];

现在 Vimeo 已转移到 oauth 2.0.我创建了应用程序并找到了客户端标识符"、请求令牌 URL"、授权 URL"、访问令牌 URL".现在我不确定如何去做.在 oauth 1.0 的早期,我得到了访问令牌"和令牌秘密".

Now Vimeo has shifted to oauth 2.0. I have created app and found "Client Identifier", "Request Token URL", "Authorize URL", "Access Token URL". Now I am not sure How to go about. Earlier in oauth 1.0 I was getting "Access Token" and "Token Secret".

编辑

我试过了.我有单个用户的访问令牌.vimeo 文档说我们发送的标题类似于curl -H"Authorization: bearer " https://api.vimeo.com" 我该怎么做.

I tried this. I have access token for single user. vimeo documents says we send header like "curl -H "Authorization: bearer <OAUTH_TOKEN>" https://api.vimeo.com" How can i do it.

   consumer = [[OAConsumer alloc]initWithKey:@"456a8852ebd72760de4d2206bab3dad0db35a66b" secret:@"eb74abb5d1f38ad0bd570d24e4d1d0ee3a447534"];

    NSURL *url = [NSURL URLWithString:@"http://vimeo.com/api/rest/v2"];

    request = [[OAMutableURLRequest alloc] initWithURL:url
                                              consumer:consumer
                                                 token:nil
                                                 realm:nil
                                     signatureProvider:nil];

    [request setParameters: [NSArray arrayWithObjects: [OARequestParameter requestParameter:@"method" value:@"vimeo.channels.getAll"],[OARequestParameter requestParameter:@"format" value:@"json"], nil]];
    [request addValue:[NSString stringWithFormat:@"bearer %@",@"a75a63c0e0121b0704a4c98d6e209eb2"] forHTTPHeaderField:@"Authorization"];
    [request setHTTPMethod:@"POST"];

    OADataFetcher *fetcher = [[OADataFetcher alloc] init];

    [fetcher fetchDataWithRequest:request

                         delegate:self

                didFinishSelector:@selector(requestTokenTicket:didFinishWithData:)

                  didFailSelector:nil];

编辑我也试过没有客户端密钥和秘密.

EditI tried without client key and secret also.

NSURL *aUrl = [NSURL URLWithString: @"http://vimeo.com/api/rest/v2?format=json&method=vimeo.channels.getAll"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:30.0];

    [request addValue:[NSString stringWithFormat:@"bearer %@",@"7c7139ec99fa9e09f77dd2512780c301"] forHTTPHeaderField:@"Authorization"];

    [request setHTTPMethod:@"GET"];

    NSError *error = nil;
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error: &error];

    NSDictionary *JSONDictionary = [NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error];
    NSLog(@"Response : %@", JSONDictionary);

输出是一样的

Response : {
    err =     {
        code = 401;
        expl = "The consumer key passed was not valid.";
        msg = "Invalid consumer key";
    };
    "generated_in" = "0.0020";
    stat = fail;
}

谢谢.

推荐答案

您将参数作为 JSON 对象的一部分提供,但 client_credentials 流实际上定义为使用带有 Content-Type 设置为 application/x-www-form-urlencoded.因此 Vimeo 不会在其令牌端点识别有效请求.检查规范中的示例:http://tools.ietf.org/html/rfc6749#section-4.4.2

You're supplying the parameters as part of a JSON object but the client_credentials flow is actually defined as using a plain POST with Content-Type set to application/x-www-form-urlencoded. Hence Vimeo won't recognize a valid request at its token endpoint. Check the example in the spec at: http://tools.ietf.org/html/rfc6749#section-4.4.2

这篇关于Vimeo 集成到 ios oauth 2.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 08:05