繁体   English   中英

如何使用 Active Directory 登录解决赛普拉斯中的无限重定向?

[英]How to solve infinite redirect in Cypress with Active Directory Login?

我正在使用赛普拉斯测试 Active Directory 登录背后的网站。 到目前为止,我能够登录并将访问令牌保存在本地存储中。 之后它进入一个无限重定向循环。 我猜它试图找到访问令牌?

无论如何,我已经看过一堆关于 Stackoverflow 的文章和问题,但到目前为止还没有一个具体的分析器或完整的解决方案。

到目前为止,这是我的设置:

这是我的“command.js”文件:

Cypress.Commands.add("activeDirectoryLogin", () => {

cy.request({
    method: "POST",
    url: `https://login.microsoftonline.com/${Cypress.env("adTenantId")}/oauth2/v2.0/token`,
    form: true,
    body: {
        // Client credentials way
        grant_type: "client_credentials",
        client_id: Cypress.env("adClientId"),
        client_secret: Cypress.env("adClientSecret"),
        scope: `${Cypress.env("adClientId")}/.default`,
    }
}).then((response) => {

    const accessTokenResponse = response.body.access_token;

    const environment = "login.windows.net";
    const idTokenClaims = jwt.decode(accessTokenResponse);
    const localAccountId = idTokenClaims.oid || idTokenClaims.sid;
    const clientId = Cypress.env("adClientId");
    const realm = Cypress.env("adTenantId");
    const homeAccountId = `${localAccountId}.${realm}`;
    const scope = `${Cypress.env("adClientId")}/.default`;

    // Build Token ID for storage
    const tokenId = {
        authorityType: "MSSTS",
        homeAccountId,
        environment,
        realm,
        idTokenClaims,
        localAccountId,
        username: idTokenClaims.preferred_username,
        name: idTokenClaims.name,
    };

    // Build access token for storage
    const now = Math.floor(Date.now() / 1000);
    const accessToken = {
        credentialType: "AccessToken",
        tokenType: "Bearer",
        homeAccountId,
        secret: response.body.access_token,
        cachedAt: now.toString(),
        expiresOn: (now + response.body.expires_in).toString(),
        extendedExpiresOn: (now + response.body.ext_expires_in).toString(),
        environment,
        realm,
        clientId,
    };

    const idTokenKey = `${homeAccountId}-${environment}-idtoken-${clientId}-${realm}-`;
    const accessTokenKey = `${homeAccountId}-${environment}-accesstoken-${Cypress.env("adClientId")}-${Cypress.env("adTenantId")}-${scope}--`;
    const accountKey = `${homeAccountId}-${environment}-${realm}`;

    sessionStorage.setItem(idTokenKey, JSON.stringify(tokenId));
    sessionStorage.setItem(accessTokenKey, JSON.stringify(accessToken));
    sessionStorage.setItem(accountKey, JSON.stringify(accountKey));
});

});

和我的测试:

before(() => {
 cy.activeDirectoryLogin();
 cy.visit(pagesData.homepage);

 cy.get("#uc-btn-accept-banner").click();
});

这会导致来自“https://login.microsoftonline.com/etc/etc”的无限重定向

有谁知道这里缺少什么? 是否已解决或有其他方法可以做到这一点?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM