首页 > 解决方案 > 当用户已在 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>

标签: javascripthtmltfs

解决方案


你是如何发起 REST 调用的?最好使用 Rest Client API。您从服务器请求的资源也很重要,必须在扩展中设置特定的范围。

还告诉我您使用的是哪种身份验证?为此目的使用 oAuth,VSS SDK 将根据您保存在 TFS 中的凭据为您提供 oAuth AccessToken。您必须将该令牌用于所有 REST 调用。


推荐阅读