当前位置: 首页 > 知识库问答 >
问题:

如何在过期后使用 OAuth 2.0 以及 iOS 应用程序中的 Youtube API 获取新的访问令牌

容飞掣
2023-03-14

我正在我的iPad应用程序中使用Youtube Api。我设法通过了身份验证,并使用OAuth 2.0获得了访问令牌。我的问题是,令牌在一个小时后过期,我不知道如何使用刷新令牌获得新的令牌,而无需再次通过身份验证过程。我使用的是XCode 4.5和iOS 5.1

共有2个答案

潘畅
2023-03-14

下面是使用AFNetworking发出请求来刷新accessToken的完整代码:

NSString *refreshToken = <YOUR_REFRESH_TOKEN>;

NSString *post = [NSString stringWithFormat:@"client_secret=%@&grant_type=refresh_token&refresh_token=%@&client_id=%@",kYouTubeClientSecret,refreshToken,kYouTubeClientID];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSURL *url = [NSURL URLWithString:@"https://accounts.google.com/o/oauth2/token"];

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

AFHTTPRequestOperation *httpRequest = [httpClient HTTPRequestOperationWithRequest:request
                                                                          success:^(AFHTTPRequestOperation *operation, id responseObject) {
                                                                              NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:nil];
                                                                              NSString *newAccessToken = json[@"access_token"];
                                                                              NSLog(@"received new accessToken = %@",newAccessToken);

                                                                              // store accessToken here

                                                                          } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                                                              NSLog(@"error refreshing token: %@",[error localizedDescription]);

                                                                          }];
[httpClient enqueueHTTPRequestOperation:httpRequest];
印飞捷
2023-03-14

根据文档

如果您的应用程序在授权过程中获得了刷新令牌,那么您将需要定期使用该令牌来获取新的、有效的访问令牌。服务器端Web应用程序、已安装的应用程序和设备都获得刷新令牌。

因此,如果您已经有了刷新令牌,只需执行如下配置的< code>POST请求

POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded

client_id=21302922996.apps.googleusercontent.com&
client_secret=<YOUR CLIENT SECRET>
refresh_token=<YOUR REFRESH TOKEN>
grant_type=refresh_token

你会得到这样的回复

{
  "access_token":<A NEW ACCESS TOKEN>,
  "expires_in":<AN EXPIRING TIME>,
  "token_type":"Bearer"
}
 类似资料:
  • 我目前正在与访问令牌的生存期作斗争。我有dotnet核心Web应用程序和dotnet核心Web API。 web应用程序受OpenIDConnect授权的保护。一旦您尝试连接到web应用程序,您将被重定向到Microsoft登录表单,成功登录后,访问令牌将被提供并与刷新令牌一起存储到cookie中。 因此,访问令牌在授权头中传递给我的WebAPI请求。当access_token生存期到期时,我的W

  • 我在这里和这里面临着同样的问题,但他们没有得到回答,我有更多的信息和不同的设置,所以它不会重复。 我有一个Spring boot 1.5.13应用程序,使用带有keycloak 3.4.3服务器的Spring Security适配器。一切正常,但当我在5分钟后向应用程序发出ajax请求而没有重新加载页面时,响应返回401错误。我知道这是因为访问令牌已过期。 文件说明如下: 令牌最短生存时间在密钥斗

  • 我正在尝试使用以下命令访问 spotify 令牌 生成的网址< code > https://accounts . Spotify . com/authorize?client_id=e...0 查询返回值应为:access_token;标记类型;expires_in和state但我得到了一些HTML作为响应

  • 问题内容: 我已经使用 Laravel Passport文档* 成功创建了 server.app 和 client.app 。一切正常。 * client.app路线: 默认情况下,此路由返回 access_token ,我可以用它执行我想做的任何事情。 请求: 返回值: 题: 如何使用 client.app中* 给定的access_token 向 server.app 发出正确请求,以获取例如

  • 我正在使用 jwt 令牌在我的 angular(客户端)和 Spring 引导(服务器)应用程序中对用户进行身份验证。我希望用户在令牌过期时自动注销应用程序。我使用拦截器的概念来检查令牌是否过期,并向用户显示一个弹出窗口,说“您的会话已过期”并注销应用程序,如下所示: 这工作正常,留下一个与弹出窗口相关的问题。我在向服务器发送登录请求时,也会在执行登录请求时弹出此会话过期的弹出窗口,作为拦截器拦截

  • 我尝试在PowerShell中执行以下命令以减少访问令牌生存期: 但收到错误: New-AzureADPolicy:执行NewPolicy代码时出错:Request_BadRequest消息:配置令牌生存期用于RT/ST(刷新/会话令牌)已于2020年5月30日退役。无法再创建新策略。有关详细信息,请参阅https://docs.microsoft.com/en-us/azure/active-d