Пример скрипта cypress для обхода единого входа

#javascript #azure #authentication #single-sign-on #cypress

#javascript #azure #аутентификация #единый вход #cypress

Вопрос:

Я настраиваю новые тесты cypress для тестирования некоторых функций в приложении Dynamics 365. Но у меня осталось окно браузера с URL https://login.microsoftonline.com /__/ и текст УПС, нет теста для запуска.

 describe('Initial Cypress Tests', () => {
    it('navigate to D365', () => {
        cy.visit('https://wipropoc.crm8.dynamics.com')
    })
})
  

Ответ №1:

Я бы посоветовал вам напрямую выполнить вызов POST для получения токена аутентификации единого входа и запустить cy.visit('https://wipropoc.crm8.dynamics.com') с полученным токеном.

Вот шаги, которые следует выполнить из официальной документации,

  1. Войдите в систему, когда аутентификация выполнена на стороннем сервере.
  2. Разбирайте токены с помощью cy.request() .
  3. Вручную установите токены в локальном хранилище.
  4. Сопоставьте внешние хосты и укажите на локальные серверы.

 cy.request('POST', 'https://sso.corp.com/auth', { username: 'foo', password: 'bar' })
    .then((response) => {
    // pull out the location redirect
    const loc = response.headers['Location']

    // parse out the token from the url (assuming its in there)
    const token = parseOutMyToken(loc)

    // do something with the token that your web application expects
    // likely the same behavior as what your SSO does under the hood
    // assuming it handles query string tokens like this
    cy.visit('http://localhost:8080?token='   token)

    // if you don't need to work with the token you can sometimes
    // just visit the location header directly
    cy.visit(loc)
    })  

Подробнее об этом можно прочитать здесь — https://docs.cypress.io/guides/guides/web-security.html#Form-Submission-Redirects

Пример в реальном времени — https://xebia.com/blog/how-to-use-azure-ad-single-sign-on-with-cypress