【问题标题】:AFNetworking 2.0 with OAuth2 tokens带有 OAuth2 令牌的 AFNetworking 2.0
【发布时间】:2014-02-28 21:50:56
【问题描述】:

我正在尝试找到一种将OAuth2(访问和刷新令牌)与AFNetworking 一起使用的方法。我很难找到关于它的好文档。

我知道AFOAuth2Client 项目,但这仅适用于AFNetworking 1.xAFNetworking2.0有什么好的解决方案吗?

另外,令牌将如何刷新?我是否应该始终检查每个请求的令牌到期情况?这究竟可以在哪里完成?或者也许在令牌过期时使用计时器,然后获取一个新的?

【问题讨论】:

    标签: ios oauth-2.0 afnetworking-2


    【解决方案1】:

    为了解决您关于令牌刷新的问题,下面是我在最近几个项目中使用的代码,用于在每个请求中检查和刷新令牌(如果需要)。

    基本上,它只是将请求块传递给一个方法以进行令牌检查,然后如果令牌良好或刷新令牌后立即运行该块。

    - (void)refreshAccessTokenWithSuccess:(APIClientSuccess)success 失败:(APIClientFailure)失败{ if (self.credential == nil) { 如果(失败){ // 获取凭证失败 } 返回; } 如果(!self.credential.isExpired){ 如果(成功){ 成功(无,无); } 返回; } [自我验证UsingOAuthWithURLString:kOAuthURL refreshToken:self.credential.refreshToken 成功:^(AFOAuthCredential *newCredential){ // 成功! self.credential = newCredential; 如果(成功){ 成功(无,无); } } 失败:^(NSError *错误){ // 获取凭证失败 如果(失败){ 失败(无,错误); } }]; } - (void)RefreshGET:(NSString *)URLString 参数:(NSDictionary *)参数 成功:(APIClientSuccess)成功 失败:(APIClientFailure)失败 { APIClientSuccess nestedSuccess = ^(AFHTTPRequestOperation *operation, id responseObject) { AFHTTPRequestOperation *thisRequestOperation = [super GET:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 如果(成功){ 成功((AFHTTPRequestOperation *)操作,响应对象); } } 失败:^(AFHTTPRequestOperation *操作,NSError *错误){ // 请求失败 如果(失败){ 失败((AFHTTPRequestOperation *)操作,错误); } }]; }; [self refreshAccessTokenWithSuccess:nestedSuccess failure:failure]; }

    如果您想查看整个 APIClient 类,请告诉我。

    【讨论】:

      【解决方案2】:

      有一个AFOAuth2Client 的分支,支持AFNetworking 2.0。看看这个讨论:

      https://github.com/AFNetworking/AFOAuth2Client/pull/55#commits-pushed-5ed7a6e

      这些修复允许库与 AFNetworking 2.0 一起工作。甚至还有使用 CocoaPods 时如何引用它的说明。

      【讨论】:

      • 感谢您的链接。但是刷新访问令牌怎么样?是图书馆处理的吗?如果没有,那么看起来我必须为每个请求检查令牌是否过期,除非有另一种更好的方法。
      【解决方案3】:

      这可能不是您想要的,但这是我公司的处理方式。我们为我们的项目使用 API,因此我们将 GMail OAuth 信息交给我们的 API,然后它返回给我们 API 的令牌。我们让 API 处理令牌/过期令牌。

      根据您的应用程序,这可以很好地工作。我们一开始尝试了你的方法,但在我们的脑海中处理设备太多了,所以我们将它集成到我们的 API 中。我在设备上要做的就是用我们的 API 令牌添加一个 X-Authorization 标头,它永远不会改变。

      可能不是您想要的答案,但至少是从与您相同的人那里获得的替代路线。

      【讨论】:

        【解决方案4】:

        我为 AFNetworking 2.0 分叉了一个非常棒的 AFOAuth2Client 重写(由 Gabriel Rinaldi 编写),并进行了一些更改以满足我的需求(公开 responseObject 并接受无效的 SSL 证书)。目前正在等待拉取请求(虽然它们并不常见,所以我不希望它们被接受)。你可以通过GitHub获取我的版本

        或 Cocoapods

        pod 'GROAuth2Client', :git => 'https://github.com/nicktmro/GROAuth2SessionManager'

        或者你可以直接去 Gabriel 的原始 repo 并将其添加为 pod pod "GROAuth2SessionManager" , "~> 0.2"

        我意识到这并没有回答您关于令牌刷新的问题的第二部分。我的项目还没有那么远,所以我不能肯定地告诉你,但我想你可以很快发现它是否刷新。

        【讨论】:

          猜你喜欢
          • 2020-02-21
          • 1970-01-01
          • 1970-01-01
          • 2021-04-12
          • 1970-01-01
          • 2022-06-29
          • 2021-11-14
          • 2017-02-06
          • 2017-11-09
          相关资源
          最近更新 更多