Как TestCafe проходит аутентификацию в приложении, защищенном IAP

#authentication #testing #automated-tests #testcafe #identity-aware-proxy

#аутентификация #тестирование #автоматизированные тесты #testcafe #прокси-сервер с поддержкой идентификации

Вопрос:

Может кто-нибудь подсказать, как TestCafe может аутентифицироваться в защищенном IAP сервисе / приложении, пожалуйста? Я пытался прочитать это руководство здесь, но оно кажется мне немного сложным. Если кто-нибудь делал это раньше, было бы здорово, если бы вы могли поделиться. Заранее благодарю вас.

Комментарии:

1. TestCafe выполняет тесты на Node.js . Таким образом, вы можете получить доступ к любым защищенным службам так же, как в Node.js применение. Пожалуйста, опишите ваш сценарий более подробно. Какие действия вам нужно выполнить в тестах? Вам нужно проходить аутентификацию из учетной записи пользователя или из учетной записи службы?

Ответ №1:

Мы реализовали это, используя google-auth-library и расширив RequestHook in Testcafe.

  • Для получения токена JWT у вас должны быть учетные данные Google IAP (шаги 1 и 2 в вашей ссылке).
  • Получив токен JWT, вы добавляете его в качестве заголовка авторизации для каждого запроса, который вы выполняете к приложению (достигается путем расширения RequestHook ).

Код для вспомогательной функции примерно следующий:

 import { RequestHook } from 'testcafe';

import { GoogleAuth } from 'google-auth-library';

export class GoogleIapJWTAuthorization extends RequestHook {

  constructor () {
    // No URL filtering applied to this hook
    // so it will be used for all requests.
    super();

    const auth = new GoogleAuth({
      credentials: serviceGoogleAccount
    });

    console.log('Google Authentication');

    console.log(`Loaded Service Account ${GoogleAccount.client_email}`);
    auth.getClient()
    .then(client => client.fetchIdToken(`${GoogleAccount.targetAudience}`))
    .then(token => {
        console.log(`Successfully authenticated with Identity Aware Proxy. Id Token: ${token}`);
        this._token = token;
        return token;
    })
    .catch(err => {
        console.log(`Identity Aware Proxy Authentication Failed. Id Token: ${token}`);
        console.log(JSON.stringify(err));
        process.exitCode = 1;
    });
}
  getGoogleJwtToken() {
    return this._token;
  }

  onRequest (e) {
    //Authorization header for authentication into Google Auth IAP
    e.requestOptions.headers['Authorization']= `Bearer ${this._token}`;
  }

  onResponse (e) {
      // This method must also be overridden,
      // but you can leave it blank.
  }
}