SPNEGO authentication with Selenium Web Driver - selenium

I have SPNEGO authentication for my applications and am doing automated testing using selenium HtmlUnitDriver.
I have tried running the browser automation code inside login context of SPNEGO authentication, but it seems like it is not working,
The body of the lambda is in authentication context already. And SPNEGO is working for REST calls, but not for HtmlUnitDriver.
myACtion -> {
WebDriver driver = new HtmlUnitDriver();
driver.navigate().to(url);
}
Subject.doAs(loginContext.getSubject(), myAction);
If someone can tell me how to use SPNEGO keytab authentication with HtmlUnitDriver in selenium, I would really appreciate.

There is no support so far.
If you like to see this supported i can offer this:
implement a complete working minimal sample using only org.apache.httpcomponents 4.5.10 (maybe this might help https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html)
open a HtmlUnit issue on github and provide your sample code
i will add the required support to HtmlUnit

Related

Selenium Webdriver with Chrome browser not displaying authentication pop-up

I am automating an internal application of my client which is having LDAP authentication.
I am using Selenium 3.141.59 with C#, Chrome browser 78.
Issue:
When I have open browser manually and place url then browser displaying sign-in Pop-up to enter the userID and password. (refer screenshot)
Same time when Selenium launch browser instance then navigate to same url, it's not showing any sign-in pop-up.
Due this I was unable to continue next steps in automation.
I have tried send the userID and password along with url as blow but it's also not redirecting.
https://userID:password#url
Can anyone help me, how to resolve this issue.
What you have tried is not supported any more. You now have to include authentication headers in requests. In your case I would recommend to set up a proxy which would add headers to all outcoming messages of your browser
For example you can use Browsermob Proxy that you can configure just in your tests. Some details of how basic authentication works you can find here. It is solution for Java, however you can find which headers to set up and which values to assign (In short: header - Authorization: Basic username:password Realm="" where username:password is credentials pair encoded in Base64).
This also might be useful for you: How do I encode and decode a base64 string?
UPD: This is solution for Python Selenium.

NTLM authentication for REST api in Karate framework

Have anyone tried NTLM authentication implemented in Karate framework which i could refer? I get 401 authorization issue while I try building a test and pass header argument.
#BeforeClass
public static void before() {
System.setProperty("http.auth.ntlm.domain", "***");
System.setProperty("jcifs.smb.client.domain", "***");
System.setProperty("jcifs.smb.client.username", "***");
System.setProperty("jcifs.smb.client.password", "***");
System.setProperty("java.protocol.handler.pkgs", "jcifs");
}
Unfortunately NTLM support is not yet implemented in Karate. There is an open feature request: https://github.com/intuit/karate/issues/372 We'll need you or someone to contribute this from the open-source community.
Meanwhile you should be able to work-around this by using a Java library or custom Java code that does the necessary authentication. Refer to the Java inter-op section of the Karate documentation: https://github.com/intuit/karate#calling-java
EDIT: also see https://stackoverflow.com/a/51150286/143475
EDIT - you can use curl ! https://stackoverflow.com/a/64352676/143475

autoauth firefox plugin didn't work

Good day to all.
I'm use Selenium WebDriver to automatically test execute. But on development site using HTTP base autentification. I found AutoAuth addon for Firefox. It save login/password and don't need type credentional each time.
But this plugin don't save credentions. I'm reinstall addon and firefox, delete cookie, but nothing. On this machine in other user plugin work successfylly. Maybe, anybody have and resolve this problem?
To author of addon I wrote already.
Way:https://login:passwd#host don't help too...
Do you mean plugin not working on invoking with webdriver? simple way to create profile and call that provide in webdriver.
Here is the way to create firefox profile. Install that add-in and save credentials.
Call above saved profile in webdriver
ProfilesIni allProfiles = new ProfilesIni();
FirefoxProfile profile = allProfiles.getProfile("selenium");
WebDriver driver = FirefoxDriver(profile);
Thank You,
Murali
If it's a HTTP Basic Authentication, then you can set the credentials in the URL. Note that it requires to set the "network.http.phishy-userpass-length" preference to enable it.
Here is a working example with Selenium / Firefox / Python:
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("network.http.phishy-userpass-length", 255)
driver = webdriver.Firefox(profile)
driver.get("http://admin:admin#the-internet.herokuapp.com/basic_auth")
The approach I've used very successfully is to set up an embedded Browsermob proxy server (in Java code) and register a RequestInterceptor to intercept all incoming requests (that match the host / URL pattern in question).
When you have a request that would otherwise need Basic auth, add an Authorization HTTP header with the credentials required ('Basic ' + the Base64-encoded 'user:pass' string. So for 'foo:bar' you'd set the value Basic Zm9vOmJhcg==)
Start the server, set it as a web proxy for Selenium traffic, and when a request is made that requires authentication, the proxy will add the header, the browser will see it, verify the credentials, and not need to pop up the dialog.
You won't need to deal with the dialog at all.
Other benefits:
It's a pure HTTP solution, it works the same across all browsers and operating systems.
No need for any hard-to-automate add-ons and plugins, any manual intervention.
No need for custom profiles, custom preferences etc.
You control credentials in your test code, and don't store them elsewhere.

Howto Use Selenium and Selenium IDE with sites using SAML

I need to log into site:
play.pl
my mobile provider and fetch some data.
They use SAML. I'm unable to do this using CURL or Selenium. Any ideas what shoud i do/check?
AFAIK, neither cURL or Selenium has an inbuilt SAML stack.
So you would either have to add a "plug-in" using something like OpenSAML or send a "hard-coded" SAML message.
The problem with the latter is that SAML is very strict re. the time elapsed between send / receive so the time in the message would have to reflect current time.

How to do stress testing for a Liferay webpage?

I have a webpage in a Liferay 5.2.3 site, in order to view this page the user shoulde be logged in.
i tried JMeter for stress testing but i stopped after i had this issue here ("invalid authentication token"). What other tool i could use to do stress test without facing the authentication issue (with example of script if its available).
I had the same problem. I managed to log in and then when sending POST requests to the server I only received 403. What I have done is that I set the auth.token.check.enabled to false in the portal-ext.properties.
auth.token.check.enabled=false
But be careful. The Portal Authentication Token was implemented to prevent Cross Site Request forgery, as explained here: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF).
On a production environment set the property back to true.
More about that on the liferay site: http://www.liferay.com/community/wiki/-/wiki/Main/Authentication+Token
Well I'm not sure but you could try Grinder, it supports jython as scripting language, although i dont have a working script example at the moment.
You can use JMeter but you have to use its proxy to record your actions (login included).
Please see JMeter proxy step by step