#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.
}
}