javascript - 当用户已在 TFS 仪表板中进行身份验证时如何避免 REST API 身份验证
问题描述
我正在编写一个 TFS 小部件(HTML 和 Javascript),当我将小部件添加到仪表板时,我已正确登录 TFS。该小部件制作了一个简单的 GET API,例如:
https://{account}.VisualStudio.com/DefaultCollection/_apis[/{area}]/{resource}?api-version={version}
但是响应是未经授权的。为什么我要再次验证我的身份?该小部件是从我的 TFS 仪表板启动的...我不想再次放置凭据,实际上,如果我打开浏览器选项卡并将 API 粘贴到它可以工作的 URL 中...有没有办法解决这个问题?
!!!!更新:我尝试了这段代码,但我总是看到未经授权的(PS 从控制台我看到了令牌):
<!DOCTYPE html>
<html>
<head>
<script src="bower_components/vss-web-extension-sdk/lib/VSS.SDK.min.js">
</script>
<script>
"use strict";
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require(["VSS/Authentication/Services"],
function (VSS_Auth_Service) {
VSS.getAccessToken().then(function(token){
// Format the auth header
var authHeader = VSS_Auth_Service.authTokenManager.getAuthorizationHeader(token);
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
var fileData = this.responseText;
alert(fileData);
}
};
xhttp.open("GET", "https://........./_apis/build/builds?api-version=4.1", true);
xhttp.setRequestHeader('Authorization', authHeader);
console.log(authHeader);
xhttp.send();
// Add token as an Authorization header to your request
});
});
</script>
</head>
<body>
<div class="widget">
<h1 class="title">Builds</h1>
</div>
</body>
</html>
解决方案
你是如何发起 REST 调用的?最好使用 Rest Client API。您从服务器请求的资源也很重要,必须在扩展中设置特定的范围。
还告诉我您使用的是哪种身份验证?为此目的使用 oAuth,VSS SDK 将根据您保存在 TFS 中的凭据为您提供 oAuth AccessToken。您必须将该令牌用于所有 REST 调用。
推荐阅读
- hive - 通过返回 null 和错误的结果来进行 Hive 订单
- java - 仅提示用户输入正数
- c++ - 当节点通过函数并被接受为双指针时,如何使用双指针查找节点中的值?
- windows - Windows - 使用“.txt”或“.zip”写入文件说访问被拒绝
- c++ - 为什么在模板声明中使用类型说明符时可以被视为限定 ID
- python - 有没有办法,使用 discord.py 发送表情符号而不添加他们的 ID 号
- svg - 如何将生成的解析树保存为 IntelliJ 上 ANTLR4 插件的 .svg 文件?
- python - 在循环内循环嵌套字典
- arrays - c语言中合法棋步的性能最大化检索
- assembly - mmix 中的 setjmp 和 longjmp 实现