[英]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.