iOS使用刷新的身份验证令牌处理请求

杰夫·理查兹(Jeff Richards)

在使用iPhone应用程序时,我正在使用Google Plus SDK(GPPSignIn)来获取和刷新身份验证令牌。

这些令牌持续1小时。当我使用过期的令牌发出请求时,我正在使用的Web服务返回特定的http响应代码,以便我知道我的令牌已过期。

收到我的令牌已过期的响应后,我进行呼叫以刷新身份验证令牌。现在,我想用新令牌重复对Web服务的请求。我想在我的服务器请求对象中完成所有这些操作。

如果我自己编写整个程序,则可以只将令牌刷新请求与Web服务器请求内联,当令牌请求完成时,我可以继续进行Web服务器请求。但是,由于令牌工作是通过Google Plus SDK完成的,并且他们使用委托模型来传递身份验证请求的完成情况,因此我不知道如何在刷新令牌之前将请求保留到Web服务。

目前,我正在尝试一个“非常糟糕”的想法,如下所示,在该想法中,我尝试将请求放入新线程,然后将该线程休眠一会儿,这时它会唤醒,我们希望新令牌可用。但是必须有更好的方法!

             if (error !=nil && error.code == NSURLErrorUserCancelledAuthentication) {
             //special handling of 401, which may be a Google Auth token failure.
             // if it is, then let's go get a new token.

                 User *client = [[User alloc] init];

                 if(client.email != nil && client.password != nil){

                     if (client.accountType == AuthTypeGoogle) {
                         NSLog(@"attempt to get a new token");

                         // request new token
                         [client silentGoogleAuthentication];

                         //repeat request
                         if (repeatableRequest) {
                             dispatch_async(repeatQueue, ^{
                                     [NSThread sleepForTimeInterval:4];
                                     NSLog(@"sleepytime");
                                     [self assignCredentialstoRequest];
                                     [self makeRequest:notificationName repeatableRequest:false];

                             });

                         }
                     }
                 }
             }

任何指针将不胜感激。我查看了许多iOS令牌刷新凭单,并且看到了很多过时的问题,但是没有一个可行的解决方案。

杰夫·理查兹(Jeff Richards)

因此,在考虑了这个问题之后,我意识到了两件事。

  1. 我真正想要的是拥有[clientsilentGoogleAuthentication]客户端;调用以内联方式进行所有处理。进一步研究代码,我发现即使它是GPPSSignIn,trySilentAuthentication也支持委托,但是在完成自身处理后,它也会返回一个布尔值。
  2. 我的进程已经在主线程之外运行,因此委托对我来说几乎没有任何价值。
  3. GPPSSign登录使用共享实例,因此如果处理完成,我可以调用共享实例并直接访问结果。

因此,有了这两条信息,我就可以使用[clientsilentGoogleAuthentication]客户端了;调用捕获trySilentAuthentication调用的结果,然后将结果分配到代码中的正确位置,然后向对[clientsilentGoogleAuthentication]进行初始调用的函数返回一个布尔值,然后继续进行。像这样:

    // Try signing in silently so user doesn't have to be prompted again
BOOL authResponse = [signIn trySilentAuthentication];
if (authResponse) {
    NSLog(@"successful auth");
    NSLog(@"idToken is %@", [GPPSignIn sharedInstance].idToken);
    self.accountType = AuthTypeGoogle;
    self.password = [GPPSignIn sharedInstance].idToken;
    [self updateCredentials];
    return true;
} else {
    return false;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用cf push时出现CloudFoundry错误:刷新身份验证令牌时出错。身份验证请求失败:无效的身份验证令牌:无效的刷新令牌(已过期)

来自分类Dev

使用RxJava刷新透明身份验证令牌

来自分类Dev

使用C#刷新MS Graph的身份验证令牌

来自分类Dev

如果帐户令牌中的身份验证令牌已过期,请使用刷新令牌

来自分类Dev

Python请求-身份验证令牌

来自分类Dev

在基于令牌的身份验证中使用刷新令牌是否安全?

来自分类Dev

在asp.net vnext上使用承载令牌身份验证刷新令牌

来自分类Dev

Symfony-使用API令牌进行身份验证-请求令牌用户为null

来自分类Dev

验证 API 请求中的身份验证令牌失败。ebay 使用 .Net SDK

来自分类Dev

强制Google通过python社交身份验证刷新令牌

来自分类Dev

AWS Cognito身份验证令牌如何刷新

来自分类Dev

强制Google通过python社交身份验证刷新令牌

来自分类Dev

在事件中使用身份验证令牌

来自分类Dev

使用“ SharedPreferences”存储身份验证令牌

来自分类Dev

使用身份验证令牌保护JSON

来自分类Dev

是否应使用与访问令牌不同的秘密对JWT身份验证方案中的刷新令牌进行签名?

来自分类Dev

如何使用ADAL / OAuth向CRM Online进行身份验证并通过令牌请求数据?

来自分类Dev

使用身份验证令牌的Axios请求有时在Safari中失败

来自分类Dev

通过Volley POST请求获取Twitter身份验证令牌

来自分类Dev

Symfony:身份验证请求失败:无效的CSRF令牌

来自分类Dev

带有身份验证令牌的httr POST请求

来自分类Dev

身份验证令牌在请求之间不持久

来自分类Dev

Loopback 发出经过身份验证的请求/访问令牌管理

来自分类Dev

Owin身份验证-如何获取请求身份验证令牌的客户端的IP地址

来自分类Dev

Firebase-身份验证自定义令牌错误身份验证/网络请求失败

来自分类Dev

使用Riverpod处理身份验证

来自分类Dev

使用基于ASP.NET身份令牌的身份验证在每个Web Api请求中授权声明

来自分类Dev

使用本地应用程序默认身份令牌对Google Cloud python进行身份验证的云运行请求

来自分类常见问题

在iOS上存储身份验证令牌-NSUserDefaults与Keychain?

Related 相关文章

  1. 1

    使用cf push时出现CloudFoundry错误:刷新身份验证令牌时出错。身份验证请求失败:无效的身份验证令牌:无效的刷新令牌(已过期)

  2. 2

    使用RxJava刷新透明身份验证令牌

  3. 3

    使用C#刷新MS Graph的身份验证令牌

  4. 4

    如果帐户令牌中的身份验证令牌已过期,请使用刷新令牌

  5. 5

    Python请求-身份验证令牌

  6. 6

    在基于令牌的身份验证中使用刷新令牌是否安全?

  7. 7

    在asp.net vnext上使用承载令牌身份验证刷新令牌

  8. 8

    Symfony-使用API令牌进行身份验证-请求令牌用户为null

  9. 9

    验证 API 请求中的身份验证令牌失败。ebay 使用 .Net SDK

  10. 10

    强制Google通过python社交身份验证刷新令牌

  11. 11

    AWS Cognito身份验证令牌如何刷新

  12. 12

    强制Google通过python社交身份验证刷新令牌

  13. 13

    在事件中使用身份验证令牌

  14. 14

    使用“ SharedPreferences”存储身份验证令牌

  15. 15

    使用身份验证令牌保护JSON

  16. 16

    是否应使用与访问令牌不同的秘密对JWT身份验证方案中的刷新令牌进行签名?

  17. 17

    如何使用ADAL / OAuth向CRM Online进行身份验证并通过令牌请求数据?

  18. 18

    使用身份验证令牌的Axios请求有时在Safari中失败

  19. 19

    通过Volley POST请求获取Twitter身份验证令牌

  20. 20

    Symfony:身份验证请求失败:无效的CSRF令牌

  21. 21

    带有身份验证令牌的httr POST请求

  22. 22

    身份验证令牌在请求之间不持久

  23. 23

    Loopback 发出经过身份验证的请求/访问令牌管理

  24. 24

    Owin身份验证-如何获取请求身份验证令牌的客户端的IP地址

  25. 25

    Firebase-身份验证自定义令牌错误身份验证/网络请求失败

  26. 26

    使用Riverpod处理身份验证

  27. 27

    使用基于ASP.NET身份令牌的身份验证在每个Web Api请求中授权声明

  28. 28

    使用本地应用程序默认身份令牌对Google Cloud python进行身份验证的云运行请求

  29. 29

    在iOS上存储身份验证令牌-NSUserDefaults与Keychain?

热门标签

归档