我正在尝试查询Visual Studio Online的REST API,并希望通过OAuth授权我的用户,如msdn article所述:
Visual Studio Online使用Oauth 2.0协议为用户授权您的应用并生成访问令牌。从应用程序调用REST API时使用此标记。
我正在使用JavaScript来尝试实现此目的(为了简洁而省略onload函数,并且code / clientSecret似乎设置为正确的值):
var xhr = new XMLHttpRequest();
var params = 'client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer' +
'&client_assertion={' + clientSecret + '}' +
'&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' +
'&assertion={' + code +'}' +
'&redirect_uri=' + encodeURIComponent(redirectUri);
xhr.open('POST','https://app.vssps.visualstudio.com/oauth2/token');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader('Accept', 'application/json');
xhr.onload = //onloadfunction
xhr.send(params);
然而,我一直得到以下回应:
POST https://app.vssps.visualstudio.com/oauth2/token 400(错误请求) {“Error”:“invalid_client”,“ErrorDescription”:“无效的客户端身份验证令牌。”}
我确信我在这里缺少一些简单的东西。我尝试了各种组合,但似乎没有任何帮助。
答案 0 :(得分:3)
删除客户端断言和断言值周围的花括号{}。
此外,一般情况下,您不应该使用这种形式的OAuth来在基于JavaScript的应用中授权用户(因为您无法保护应用的客户端密码)。