Используйте аутентификацию Express-NTLM для аутентификации в API TFS - PullRequest
0 голосов
/ 02 марта 2019

Используя express и express-ntlm, как я могу создать конечную точку http://localhost:3000/api/bug/, которая создает ошибку для меня в TFS, нажав API-интерфейс TFS?

Я могу сделать это, используя request-ntlm-promise вправосейчас, и вот как я это делаю.

const ntlm = require('request-ntlm-promise');

const ntlmOptions = {
  username: 'myUserName',
  password: 'myPassword',
  url: 'http://tfsinstance/collection/project/_apis/wit/workitems/$bug?api-version=4.1',
  headers: {
    'Content-Type': 'application/json-patch+json'
  }
};

const tfsBugObject =[{
  'op': 'add',
  'path': '/fields/System.Title',
  'value': 'Test title'
}, {
  'op': 'add',
  'path': '/fields/Microsoft.VSTS.TCM.SystemInfo',
  'value': 'Test system info'
}, {
  'op': 'add',
  'path': '/fields/Microsoft.VSTS.TCM.ReproSteps',
  'value': 'test reproduction steps'
}];

ntlm.post(ntlmOptions, tfsBugObject).then((response) => { return res.send(response); });

Проблема в том, что я должен предоставить имя пользователя и пароль в объекте ntlmOptions.Это не создает ошибку в TFS, поскольку текущий пользователь обращается к Express API, а создает ошибку как пользователь 'myUserName'.

Используя пакет express-ntlm, возможно ли сделать http.post до http://tfsinstance/collection/project/... с использованием учетных данных NTLM, возвращенных из этого пакета?

TFS требует аутентификации для использования API.

Использование express-ntlm Я надеялся, что смогу сделатьследующее.

const express = require('express');
const ntlm = require('express-ntlm');
const http = require('http');
const app = express();

app.use(ntlm({ domain: 'mydomain', domaincontroller: 'ldap://domaincontroller' });

затем

httpOptions = {
    protocol: 'http',
    hostname: 'tfsinstance',
    pathname: '/collection/project/_apis/wit/workitems/$bug?api-version=4.1',
    port: 8080,
    method: 'POST',
    headers: {
        'Content-Type': 'application/json-patch+json'
    }
};

app.post('/report/bug', (req, res, next) => {
    const request = http.request(httpOptions, (response => {
        response.on('data', data => {
            // return response from TFS through express to user
        });
    }));
});

1 Ответ

0 голосов
/ 26 мая 2019

express-ntlm действует как прокси между клиентом и контроллером домена.Таким образом, контроллер домена будет обрабатывать аутентификацию с клиентом, и express-ntlm будет действовать как человек посередине до тех пор, пока аутентификация не будет успешной.

Если вы можете использовать какой-то пользователь API и использовать express-ntlm дляпросто получите правильное имя пользователя и передайте его в API TFS, что будет самым простым способом, в противном случае я бы посоветовал вам создать собственный прокси между вашим клиентом и API TFS.

...