【问题标题】:How to authenticate VSTS APIs PAT using JS如何使用 JS 验证 VSTS API PAT
【发布时间】:2019-12-11 23:36:11
【问题描述】:

我正在尝试创建一个小型服务,该服务将从 Azure-DevOps 2019 返回项目。为此,我正在尝试使用个人访问令牌进行身份验证。

尝试了各种方法,包括将 PAT 转换为 Base64(附上和不附上我的用户名)。出于某种原因,似乎没有任何效果。 我最终得到了这个:

var myPAT ="";
var myOrg = "";

var request = new XMLHttpRequest;
request.open("GET","https://dev.azure.com/"+ myOrg + "/_apis/projects?api-version=2.0", true);
var b = "Bearer [myPAT]";
request.setRequestHeader("Authorization", b);

request.onload = function() {
  var data = JSON.parse(JSON.stringify(this.response));
  console.log(data);
}
request.send()

无论我尝试过什么,我都无法通过身份验证。

【问题讨论】:

  • 你试过把Bearer [myPAT]换成Basic [myPAT]吗?

标签: javascript jquery api azure-devops


【解决方案1】:

所以,感谢 Andre,我找到了问题所在。正是这一行丢失了(实际上“:”是我错过的部分)

var base64PAT = btoa(":" +myPAT);

【讨论】:

  • 在这种情况下,如果我的回答@Yonatan 对您有帮助并导致您的实际解决方案,那将是很好的 ;-)
  • @AndreKraemer,我做到了。 Rep 仍然太低,无法显示:/
【解决方案2】:

根据official documentation,当您想在标头中传递您的 PAT 时,您已使用基本授权:

如果您希望通过 HTTP 提供个人访问令牌 标头,您必须先将其转换为 Base64 字符串。所结果的 然后可以按以下格式将字符串作为 HTTP 标头提供:

 Authorization: Basic BASE64PATSTRING

代码示例:

var myPAT ="INSERT YOUR PAT HERE";
var myOrg = "INSERT YOUR ORG HERE";
var base64Pat = btoa(":"+myPAT);
var request = new XMLHttpRequest;
request.open("GET","https://dev.azure.com/"+ myOrg + "/_apis/projects?api-version=2.0", true);
var b = "Basic " + base64Pat;
request.setRequestHeader("Authorization", b);

request.onload = function() {
  var data = JSON.parse(JSON.stringify(this.response));
  console.log(data);
}
request.send();

当您将它转换为 base64 时,请确保在您的 pat 之前插入“:”。否则将无法正常工作

【讨论】:

    【解决方案3】:

    从使用 VSS-SDK 和 Typescript/Javascript 的自定义 Azure 仪表板小部件使用 PAT 身份验证时,您可以使用以下技术。在步骤here 之后生成的 PAT 被直接粘贴到“{PAT}”中,没有“:”。

    import service = require("VSS/Service");
    import gitWebApi = require("TFS/VersionControl/GitRestClient");
    import { GitHttpClient } from "TFS/VersionControl/GitRestClient";
    import { VssHttpClient } from "VSS/WebApi/RestClient";
    import { BasicAuthTokenManager } from "VSS/Authentication/Services";
    
    ...
    
    const gitClient: GitHttpClient = service.getClient(gitWebApi.GitHttpClient);
    (gitClient as VssHttpClient).authTokenManager = new BasicAuthTokenManager("","{PAT}");
    
    // Subsequent calls will now use PAT authentication
    gitClient.getRepositories(projectId, false)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多