How I can bypass Symantec VIP authentication while running TestCafe automation test? - testing

I am running TestCafe test automation.
We have Symantec 2-Factor authentication set while someone login using username&password.
I need to bypass OR validate this 2FA process using TestCafe.
I know the basic authentication we can do using TestCafe but not sure how I can do 2FA.
fixture `Login`
.httpAuth({
username: userID,
password: password,
})
.page(appUrl)

You somehow need to programmatically get code from the NodeJS process that runs TestCafe tests. This is a difficult task. A more common approach is to disable or mock the 2FA process in test mode. It makes sense if you wish to test your Web application functionality and not Symantec 2FA.

Related

Cypress: configure hardcoded user for api requests with cypress-ntlm-auth proxy

I'm using cypress-ntlm-auth plugin in my cypress automation project, providing me windows authentication (Ntlm, kerberos etc.)
In particular, I use the ntlmSso option for Negotiate with my app. If the server sends an authentication challenge, the ntlm-proxy will perform a NTLM or Negotiate login handshake with the credentials of the user running the test client.
The problem is that I need to use a pre-defined user (to be used in my pre-prod environment) to make api requests, instead of the logged on user on the computer.
How can I do that? thanks in advance
The cypress-ntlm-auth library allows you to specify this with cy.ntlm(), by passing in hosts, username, password, and domain.
cy.ntlm(["my.host.com"], "myUser", "myPass", "myDomain")
Check out the docs here. Take note of their strategy on storing passwords.

How to skip MFA in e2e tests?

I have some difficulties with automating log in process in the web application. It's an angular app, I'm writing tests in protractor. The app uses Azure AD, so I need to pass e-mail, password and the verification code from mobile app. I know there're some very useful libraries to generate the code. The problem is I don't have the access to Azure admin panel so I'm not able to get the secret key that is necessary to use those libraries. Is it possible to somehow skip or mock the MFA? I'd be grateful for any advices how to solve this.
Assuming you want to run these tests on the CI, you could hard code a test user credential in your web application that returns true when used in a specific environment. Lets say you want user xyz#abc.com to login and then perform other tasks, add code in your web application so that when xyz#abc.com sends a request with dummy secret key, log the user in. Then you'd have to mock all the rest of the APIs that your application uses.
You can also remove the auth when you are testing it in a test CI environment. This would be a good solution but tricky. You would have to remove auth entirely for all APIs and that would require design pattern change etc.
But get the access and do it the right way.
I would actually recommend NOT skipping MFA on E2E tests in your CI.
By setting up a bypass in your code related to your environments you are taking the risk of having this "test account" in the production environment and being it found by someone. And believe me, it will happen sooner or later ;).
Today multiple third-party tools exist allowing you to parse SMS-based MFA or TOTP codes (like the Azure app). For example, the GetMyMFA platform provides you with an API allowing you to receive and inject in your CI your MFA codes.
If you have the time and resources, I would recommend looking for a tool that allows you to get MFA codes from an API and have your automated E2E tests inject that code in your CI.
Cheers

How to resolve Multi Factor authentication for AAD in Selenium test in CI

I am trying to integrate Selenium tests to CI. The problem I am facing is all the users (even test user) is protected by Multi-factor authentication and when I will run test cases on the server with each login there will a prompt user for the Multi factor. We are running selenium test cases on SPA using adal-angular.js and adal.js
How to resolve this issue? Is there any way to create a logical switch on API server or SPA to bypass the authentication prompt?
Thanks.
You cannot do this directly. Frankly if you could, I would be very concerned about the security of MFA at all.
Having said that, there is probably a way to help move forward. An SMS Modem (i.e. https://www.diafaan.com/how-to/choose-gsm-modem/) you could register a SIM card with Test User and use the modem to parse the incoming MFA challenge.
Another alternative is to use 3rd pary messaging service (as Twilio) and register a dedicated incoming phone number. Then register that number with the MFA. Then use the Twilio API to parse the MFA challenge.

How can I test the Microsoft Authentication process using automation?

I am new to Microsoft Graph Framework. I recently developed a web application with Graph API's integration.
The first time browsing to the page on my app, it redirects the user to Microsoft app login page and prompt for credentials. Once authentication successful then I use the authentication token to get the user's emails and do post processing on those emails.
However, I need to write tests to see if the token is being persisted properly and for the subsequent processing on emails. All my tests are automated tests that are run on jenkins which is not set up to run with a browser. And without having the authentication token, I am unable to test the downstream process. Is there a way to get the token through an API without requiring a browser/user intervention?
For automated tests running in Jenkins, you probably want to use an auth flow that doesn't require the user to login. Please see the documentation page on Getting auth tokens without a user for detailed information.
In summary, you can register an app on the App Registration site and add application permissions like User.Read.All. Since the goal is to get tokens that work without a user login, you'll need to grant your app access to run as a service by getting administrator consent. After that one time setup, you can then easily request tokens by POSTing to the token endpoint with your app info and secret.
Perhaps you could use the username/password authentication flow, where your test doesn't go through the normal interactive experience.
You need to create a UserCredential and use that to acquire a token.
UserCredential uc = new UserCredential(user, password);
public Task<AuthenticationResult> AcquireTokenAsync(
string resource, string clientId, UserCredential userCredential);

Selenium and SSO

I need to run my Selenium Webdriver JUnit tests separately, but also all at once. I've been looking for a solution for something that basically cuts down to one single issue: I'm testing an application which uses SSO.
That means, I have to manually sign in when I run a test. This is on the other hand even desired, because you don't want to store critical passwords in any files. This is not even harmfull when you run a single test. But when you're in need to run them all, and you have about 100 tests, you would have to sign in 100 times. No way Jose!
I have found out that one possible solution could be Java proxy server. I find codes that show how to create and handle one, but not the SSO part in it. Can anyone help me? Or will the password be stored somewhere either ways?
You need to find out more about your SSO implementation. I suggest using your browser's developer tools our a debugging proxy such as Fiddler or Charles to capture the HTTP traffic between your browser and the servers during SSO authentication, then implementing these requests in a Java web client. SSO authentication often results in setting a cookie. If you capture this cookie after the authentication phase, then you can reuse this cookie in every Selenium test.
The authentication will require credentials, which you could put into a properties file. You could exclude this properties file from source control, and ask all developers to use their own credentials when running tests.