这非常奇怪(也许不安全的行为),所以请耐心等待,因为我试图解释这一点。我已经调试了几个小时,无法弄清楚为什么Github API会以这种方式处理我的RESTful API请求。GitHub API问题 - 创建公钥
我使用Github oAuth API验证我的应用程序。当用户成功验证他们的github账户时,我根据请求的范围获得用户的access_token ...没问题,标准oAuth行为(https://developer.github.com/v3/oauth/#web-application-flow)。
然后,以后每API调用,我附上访问令牌的HTTP Authorization头,像这样:
Authorization: 'token abcdefghijklmnopqrstuvwxyz123456789abcde'
的行动我想用的access_token执行是增加公共密钥对用户的帐户,一切似乎只是罚款:https://developer.github.com/v3/users/keys/#create-a-public-key
现在,2个用户帐户这样做时,怪事发生了。如果我有2个用户,比方说,Alice和Bob。
Alice用github登录应用程序,获得access_token'aaa',我的应用程序可以使用授权标题中的'aaa'access_token成功将公钥添加到她的帐户。
我注销应用爱丽丝和鲍勃使用的GitHub的凭据登录为鲍勃。 auth成功,Github为Bob提供了access_token'bbb'。但是,当试图将公钥添加到Bob的帐户时,即使Bob在其账户中没有任何公钥,也会得到一个“密钥已被使用”的错误。
但是,通过使用鲍勃的access_token“BBB”,用于其他API请求,比如上市私有仓库和组织,Github上返回鲍勃的数据。似乎在他的账户中创建公钥时,Github仍然将Bob的access_token'bbb'与Alice的公钥关联起来。
更奇怪的是我验证了这一点,因为一旦我从Alice的账户中删除了公钥,我就能够成功登录Bob并将公钥添加到Bob的账户,而不是Alice的公钥。
我在该国的两个独立的地理区域测试在同一浏览器这种行为,在两个不同的浏览器在同一台计算机上,并在两个不同的计算机具有相同的结果。
我假设,通过Github上提供的将的access_token就是行动要对执行用户帐户正确关联。特别是对于POST和DELETE请求,其中用户名未在URL中显示,就像大多数GET请求一样。
我敢肯定,我失去了一些东西,但如果有人能提供一些见解它会不胜感激,谢谢!