HTTP basic authentication URL with “@” in password

1.4K    Asked by Dhruvtiwari in SQL Server , Asked on May 23, 2021

I'm trying to set up some selenium tests to our staging server using Sauce Labs. It's behind a basic HTTP auth, so theoretically I could set the selenium URL to http://user:password@www.stagesite.com. However, the password contains a "@", causing all sorts of problems as you can imagine. I tried escaping it with a backslash but that did nothing from what I can tell.

So,

  1. is there an alternative way to do HTTP authentication using selenium, i.e., not via the URL. Or,

  2. is there a way to use URL-based auth but somehow tell the browser that the "@" is part of the password?

Answered by Bernadette Bond

It is indeed not possible to pass the username and password in url via query parameters in standard HTTP auth. Instead, you use a special URL format, like this: http://username:password@example.com/ -- this sends the credentials in the standard HTTP "Authorization" header.

It's possible that whomever you were speaking to was thinking of a custom module or code that looked at the query parameters and verified the credentials. This isn't standard HTTP auth, though, it's an application-specific thing.

Also, Passing Basic authentication parameters in URL not recommended

There is an Authorization header field for this purpose check it here: http header list

How to use it is written here: Basic access authentication

There you can also read that although it is still supported by some browsers the suggested solution of adding the Basic authorization credentials in the URL is not recommended.

Passing authentication parameters in a query string

When using OAuth or other authentication services you can often also send your access token in a query string instead of in an authorization header, so something like:

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD

Your Answer

Interviews

Parent Categories