【问题标题】:How to avoid REST API authentication when user is already authenticated in TFS dashboard当用户已在 TFS 仪表板中进行身份验证时如何避免 REST API 身份验证
【发布时间】:2018-06-28 14:48:42
【问题描述】:

我正在编写一个 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>

【问题讨论】:

    标签: javascript html tfs


    【解决方案1】:

    您需要检查您是否有vso.buildvso.build_execute 作用域。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我使用 XMLHttpRequest();做一个简单的GET。我不明白为什么我必须再次对我进行身份验证。顺便说一句,您有 javascript oAuth sn-p 示例吗?
      【解决方案3】:

      使用 oAuth 令牌进行身份验证。示例如下:

       var getWorkItem1 = function (access_token) {
          $.ajax({
              type: 'GET',
              url: 'https://{accountName}.visualstudio.com/{projectname}/_apis/wit/workitems/1?api-version=4.1',
              cache: false,
              dataType: 'json',
              beforeSend: function (xhr) {
                  var b = "Bearer "+access_token;
      
                  xhr.setRequestHeader("Authorization", b);
              },
          }).done(function (data) {
              var workItemType = data.fields['System.WorkItemType'];
          }).error(function (e) {
      
          });
      }
      

      使用Core Client SDK获取AccessToken,请参考以下链接:

      https://docs.microsoft.com/en-us/vsts/extend/reference/client/core-sdk?view=vsts

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        • 2022-06-10
        • 1970-01-01
        • 2020-04-10
        • 2016-04-16
        • 2012-08-29
        • 1970-01-01
        相关资源
        最近更新 更多