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

使用刷新访问令牌给出“请求失败:未授权(401)”

朱丰
2023-03-14

我在谷歌日历API工作。

if([self.auth shouldRefreshAccessToken]) {
    self.auth.accessToken=self.auth.refreshToken;
}

NSString *strURL=[NSString stringWithFormat:@"https://www.googleapis.com/calendar/v3/calendars?key=%@&access_token=%@",kGoogleClientID,self.auth.accessToken];

 NSDictionary *params = @{@"summary":@"1233"};

[manager POST:strURL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", [operation responseString]);
    NSDictionary *dict =(NSDictionary*)responseObject;

    [[NSUserDefaults standardUserDefaults] setObject:[dict objectForKey:@"id"] forKey:KDefaultCalendarID];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [MBProgressHUD hideHUDForView:self.view animated:YES];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    [MBProgressHUD hideHUDForView:self.view animated:YES];

    //        [MBProgressHUD hideHUDForView:self.view animated:YES];
    //        UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"" message:@"Request failed due to server error. Please try after some time." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    //        [alertView show];
}];

问题是当使用刷新令牌时,我得到的是“请求失败:未授权(401)”(刷新令牌是因为用户不应该每次都需要登录

对于在用户首次授权应用程序后检索的正常访问令牌(未过期),它可以正常工作。

下面是运行时url,它只在不使用刷新的访问令牌之前工作。

共有1个答案

方子安
2023-03-14
-(void) setNewAccessToken {
NSString *clientID=kGoogleClientID;
NSString *clientSecret=kGoogleClientSecret;
NSString *strRefreshToken;

if([self.auth shouldRefreshAccessToken]) {
    strRefreshToken=self.auth.refreshToken;

    NSString *post =[[NSString alloc] initWithFormat:@"client_secret=%@&grant_type=refresh_token&refresh_token=%@&client_id=%@",clientSecret,strRefreshToken,clientID];
    NSLog(@"%@",post);
    NSURL *url=[NSURL URLWithString:@"https://accounts.google.com/o/oauth2/token"];

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];

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

    NSURLConnection *con = [NSURLConnection connectionWithRequest:request delegate:self];
    [con start];
 }
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// The request is complete and data has been received
// You can parse the stuff in your instance variable now
NSString *responseJSON;

// This flag indicates whether the response was received after an API call and out of the
// following cases.

// Convert the received data in NSString format.
responseJSON = [[NSString alloc] initWithData:(NSData *)_receivedData encoding:NSUTF8StringEncoding];

NSDictionary *dictJsonNotification =
[NSJSONSerialization JSONObjectWithData: [responseJSON dataUsingEncoding:NSUTF8StringEncoding]
                                options: NSJSONReadingMutableContainers
                                  error: nil];
NSLog(@"dictJsonNotification %@",dictJsonNotification);

[[NSUserDefaults standardUserDefaults] setObject:[dictJsonNotification objectForKey:@"access_token"] forKey:KDefaultGmailAccessToken];
[[NSUserDefaults standardUserDefaults] synchronize];

[self createCalendar1];

}

然后使用保存的访问令牌进行查询

 类似资料:
  • 我正在尝试授权我使用 OAuth 1.0a 进行服务。我可以执行令牌和步骤,但是当我调用 URL 时,我收到 401 未授权响应,并显示以下消息: 我已经屏蔽了凭证和URL。 请求令牌 URL:https://url-to-the-service.com/oauth/requestToken 授权令牌 URL:https://url-to-the-service.com/oauth/authori

  • 我试图建立一个类,它可以环绕。NET Google API,这样我就可以使用我以前获得的访问令牌来访问用户的Google驱动器。到目前为止,我只是试图让它工作,这样我就不需要刷新令牌(稍后会有更多)。最终目标是让某人通过我设置的web页面进行身份验证,通过直接调用Google Rest API(我将其存储在数据库中)获得访问令牌和刷新令牌。然后,他们可以请求将文件上载/下载到另一个页面上的驱动器上

  • 我正在尝试从应用程序服务中获取Google的刷新令牌,但我不能。 日志说 2016-11-04T00:04:25 PID[500]收到的详细请求:获取https://noteappsvr.azurewebsites.net/.auth/login/google?access _ type = offline 2016-11-04t 00:04:25 PID[500]从https://account

  • 一旦我点击链接并输入用户名和密码,我就会在java jersey API中的配置回调url上获得回调。 我在回拨请求中得到以下详细信息。 这里我使用Scribe Java库进行OAuth身份验证

  • 我们正在尝试将DocuSign与我们的产品集成。 我们的场景:我们的组织有一个(合作伙伴)帐户。我们创建了一个集成密钥(ClientID)和Secret。我们希望我们的客户使用他们自己的帐户(不是我们合作伙伴帐户的子帐户(管理员-用户关系))创建信封,并生成签名URL以及我们的集成商密钥和机密。 以下步骤: 创建了一个帐户(合作伙伴帐户) 问题:是否可以将一个帐户的集成商密钥和密码与另一个帐户(两

  • 我想通过Azure API管理公开一些API(逻辑应用程序、函数)。它们工作得很好,所以我决定添加OAuth2自动化。 我一步一步地跟着https://docs.microsoft.com/fr-fr/azure/api-management/api-management-howto-protect-backend-with-aad: 在Azure AD中注册应用程序(后端应用程序)以表示API