GitHub API3 删除访问令牌

6
我正在制作一个表单,允许用户在将拉取请求合并到项目核心之前同意一些条件。为了提供GitHub帐户的所有权证明,需要用户使用GitHub API向我的网站授予只读访问权限。
我想为用户提供“撤销访问”功能-我实际上不想访问他们的帐户,这只是验证帐户所有权的好方法。
我知道用户可以通过 GitHub应用程序设置页面撤销应用程序访问权限,但如果可能的话,我想简化此过程。我查看了GitHub APIv3文档,但没有看到任何允许请求GitHub撤销access_token的内容。
问题:
是否有可能以编程方式撤销我的应用程序的access_token?
3个回答

4
您可以撤销授权令牌:

撤销应用程序的授权

OAuth 应用程序所有者也可以撤销 OAuth 应用程序的单个令牌。您必须使用基本身份验证进行此操作,其中用户名是 OAuth 应用程序的 client_id,密码是其 client_secret。

DELETE /applications/:client_id/tokens/:access_token

文档 是正确的;我已经验证了这个方法。


请注意,这并不会撤销已授予的权限。如果应用程序想再次请求它,它将被授予。 - sdwilsh
这似乎是正确的终端节点:https://developer.github.com/changes/2020-02-14-deprecating-oauth-auth-endpoint:https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-token - Juraj Martinka

4
如果您查看GitHub OAuth授权API,它们列出了使用“DELETE /authorizations/:id”删除授权的能力。

我无法撤销授权,你能帮我解决一下吗? - Shaik Riyaz
我需要更多的信息才能帮助你。你在做什么?你遇到了什么错误? - Mark S.
谢谢回复..我尝试了这个来获取ID NSString * url = @"https://api.github.com/authorizations"; NSMutableURLRequest *request2 = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:gistCreateURLString2]]; 然后我发送了一个请求...但是我没有得到任何错误,响应数据给出以下内容.... "documentation_url" = "http://developer.github.com/v3"; message = "Not Found"; - Shaik Riyaz
我认为我的URL有些问题,我需要附加什么才能获取ID,然后我可以传递这个ID来撤销访问令牌。 - Shaik Riyaz
我也尝试了这个网址:https://api.github.com/authorizations?client_id=7a1e0a1fd6aaabdd2db9 - Shaik Riyaz
显示剩余3条评论

1

我知道现在有点晚了,但是我希望这能帮到其他人。

   NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://api.github.com/applications/%@/tokens/%@",GITHUB_CLIENT_ID,token]];

   NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
   NSString *theUsername = GITHUB_CLIENT_ID;
   NSString *thePassword = GITHUB_CLIENT_SECRET;

   [request addValue:[NSString stringWithFormat:@"Basic %@",[self base64forData:[[NSString stringWithFormat:@"%@:%@",theUsername,thePassword] dataUsingEncoding: NSUTF8StringEncoding]]] forHTTPHeaderField:@"Authorization"];
   [request setHTTPMethod:@"DELETE"];
   [request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];

   NSError *error = nil;
   NSURLResponse *response;

   [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];



- (NSString*)base64forData:(NSData*)theData
{
    const uint8_t* input = (const uint8_t*)[theData bytes];
    NSInteger length = [theData length];

    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
    uint8_t* output = (uint8_t*)data.mutableBytes;

    NSInteger i;
    for (i=0; i < length; i += 3) {
        NSInteger value = 0;
        NSInteger j;
        for (j = i; j < (i + 3); j++) {
            value <<= 8;

            if (j < length) {
                value |= (0xFF & input[j]);
            }
        }

        NSInteger theIndex = (i / 3) * 4;
        output[theIndex + 0] =                    table[(value >> 18) & 0x3F];
        output[theIndex + 1] =                    table[(value >> 12) & 0x3F];
        output[theIndex + 2] = (i + 1) < length ? table[(value >> 6)  & 0x3F] : '=';
        output[theIndex + 3] = (i + 2) < length ? table[(value >> 0)  & 0x3F] : '=';
    }

    return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}

请问您能否发送给我如何在Postman中操作的方法?附上截图会更有帮助。 - sagar potdar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接