【问题标题】:Authenticate REST API with OAuth in VSTS/TFS 2017在 VSTS/TFS 2017 中使用 OAuth 对 REST API 进行身份验证
【发布时间】:2017-03-13 05:14:37
【问题描述】:

我正在尝试使用 OAuth 对 REST 调用进行身份验证,但我找不到任何关于此的示例。请善意地指导我(提供示例)。

我指的是以下来自 Microsoft 的文档。

https://www.visualstudio.com/en-us/docs/integrate/get-started/rest/basics

我可以使用 NTLM 对此进行身份验证(以下是我使用的示例)。有相同的节点库(https://www.npmjs.com/package/httpntlm)。但是对于 OAuth,我需要类似的东西。

httpntlm.patch(options, function(err,res) {
            console.log("patch complete");
            console.log(res.body);
})

【问题讨论】:

  • 如何统计我所有的用户都来自 vsts api?有没有简单的文档有 php

标签: rest oauth node-modules azure-pipelines-build-task azure-devops-rest-api


【解决方案1】:

您可以在 VSTS 中 Authorize access to REST APIs with OAuth 2.0。它目前仅适用于 VSTS,不支持 TFS2017。你也可以检查这个问题:TFS 2015 REST API Authentication。并且已经有相关的uservoice

首先,您将注册您的网络应用并从 Visual 获取应用 ID 工作室团队服务。使用该应用 ID,您会将用户发送到 Visual Studio Team Services 授权你的应用访问他们的 那里的帐户。一旦他们这样做了,您将使用该授权 获取该用户的访问令牌。当您致电 Visual Studio 团队时 代表该用户的服务 API,您将使用该用户的访问权限 令牌。

实现 OAuth 以在 GitHub 中调用 Visual Studio Team Services REST API 的 C# 示例供您参考:vsts-dotnet-oauth-sample

【讨论】:

    【解决方案2】:

    我不确定您用于实现此目的的技术,但如果您的应用程序是 .Net/.Net Core MVC 应用程序,那么 Microsoft 提供了相同的示例代码:VSTS Sample Code C#

    但是,如果您的应用程序类似于我的应用程序,SPA(角度)和 .Net Core 后端,那么没有文档清楚地描述在这种情况下哪些部分应该去哪里以及如何实现 OAuth 流。为了回答这个问题,我通过以下方式实现了这一点:

    1. 在 VSTS 上注册您的应用,回调 url 指向您的 UI 应用上的回调路由。
    2. 在后端添加 Authorize 函数以调用 VSTS 授权端点。
    3. 在 UI 上有一个按钮/链接,您想在其中连接到 VSTS API,将其指向后端的授权功能。 从后端而不是 ui 调用 vsts 授权端点的原因是,vsts 授权返回 302 重定向响应,而 Angular 4+ 仍然有明确的方法来处理这个问题。 .Net MVC 有 redirectreult 方法,可以很好地处理它。
    4. 一旦调用授权,您将看到显示所有范围的接受/拒绝屏幕。
    5. 一旦用户接受它,他将重定向到指向您的 UI 的回调 url。
    6. 从 UI 中的回调 url 获取授权码,提取代码并将其传递给 API。
    7. API 将通过传递 Auth 代码和客户端密码来调用 vsts 令牌端点。
    8. API 将收到 Auth Token 和 Refresh Token。
    9. 使用身份验证令牌进行 VSTS api 调用并持久化刷新令牌(有很多文章提到如何安全处理令牌)。

    就是这样,OAuth 流可以通过上述方式在 Angular 和 .Net Core 中实现。

    请注意,这是微软未记录的内容,因此这种方法可能存在缺陷,我愿意学习和纠正。

    请发表评论以获取示例回购。

    【讨论】:

    • 您的应用程序在哪个技术栈上?
    猜你喜欢
    • 2017-12-23
    • 2013-07-14
    • 1970-01-01
    • 2018-09-11
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    相关资源
    最近更新 更多