【问题标题】:How to authenticate API in swift?如何快速验证 API?
【发布时间】:2015-08-18 21:45:02
【问题描述】:

我正在尝试在我的应用中添加推文。 我已经实现了登录按钮并尝试通过搜索 API (Fabric) 访问推文

https://api.twitter.com/1.1/search/tweets.json?q=Himan_dhawan

它显示了错误的身份验证错误

然后我通过此代码在标头中添加身份验证标头来发出经过身份验证的请求

    let twitter = Twitter.sharedInstance()
    let oauthSigning = TWTROAuthSigning(authConfig:twitter.authConfig, authSession:twitter.session())
    let authHeaders = oauthSigning.OAuthEchoHeadersToVerifyCredentials()
   let request = NSMutableURLRequest(URL: NSURL(string: "https://api.twitter.com/1.1/search/tweets.json?q=Himan_dhawan")!)
    request.allHTTPHeaderFields = authHeaders

但它仍然显示错误的身份验证.... 我陷入了如何在您的应用中添加推文... 谁能告诉我最简单的方法吗??

【问题讨论】:

    标签: swift authentication http-headers


    【解决方案1】:
    let authHeaders = oauthSigning.OAuthEchoHeadersToVerifyCredentials()
    let urlHeader: AnyObject? = authHeaders[TWTROAuthEchoAuthorizationHeaderKey]
    
    request.allHTTPHeaderFields = urlHeader
    

    旁注:

    对于 Twitter API。在野外使用非常少,并且对 swift 的支持很少。对于 swift,为了避免上述问题,我使用 swifter。 https://github.com/mattdonnelly/Swifter 一旦您提供您的消费者密钥等,它就会为您完成所有工作。

    【讨论】:

    • 为什么上面的代码没有按预期工作?为什么它显示错误的身份验证?我问这个 bcs 我接近我的目标,我只是想验证我的请求......我无法弄清楚我的问题......我被卡住了
    • authheaders 不是您需要的密钥。 authHeaders[TWTROAuthEchoAuthorizationHeaderKey] 是您需要的密钥。
    • 我已经实现了你所写的......但它仍然显示我的身份验证不正确......这是什么原因......你有什么想法吗?
    【解决方案2】:

    当您想要使用自己的 NSMutableURLRequest 时,Fabric 文档并没有为您提供有关创建 OAuth 签名标头的完整信息。

    let authHeaders = oauthSigning.OAuthEchoHeadersToVerifyCredentials()

    return [NSObject : AnyObject]! 字典为您提供请求所需的值,它为标头提供的值与需要通过 NSMutableURLRequest 发送的值不同。

    这是您应该如何设置此请求的标头:

                let twitter = Twitter.sharedInstance()
    
                let oauthSigning = TWTROAuthSigning(authConfig:twitter.authConfig, authSession:twitter.session())
    
                let authHeaders = oauthSigning.OAuthEchoHeadersToVerifyCredentials()
    
                let mutableUrlWithUsableUrlAddress = NSMutableURLRequest(URL: usableUrlForRequest)
    
                mutableUrlWithUsableUrlAddress.addValue(authHeaders[TWTROAuthEchoAuthorizationHeaderKey] as? String, forHTTPHeaderField: "Authorization")
    

    这会将所需的授权密钥设置为请求中“授权”标头的值,而不是当您传入 authHeaders 字典时,它会设置为“X-Verify-Credentials-Authorization”。

    Fabric doc's 确实参与其中,但它比应有的稍微隐藏了一些。

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多