Skip to main content

Interested in sponsoring the site? [find out more]

blog title image

3 minute read - API Testing API Challenges

Challenge 29 - How To - Authentication 401

Jul 24, 2021

This post and video shows how to complete the authentication failed with username and password challenge number 29, which returns a status code of 401.

What are the API Challenges?

Our API Challenges Application has a fully functional cloud hosted API, and a set of challenges to work through.

Authentication Challenge

Most of the challenges simply require the correct payload, and an X-Challenger header to track the session. The authentication challenges require an extra header, the value for which can only be obtained with a username and password.

Challenge 29 Authentication Failed

Issue a POST request on the /secret/token end point and receive 401 when Basic auth username/password is not admin/password

  • POST request means use the HTTP Verb POST
    • e.g. POST /secret/token sends to the secret token endpoint
  • Basic auth means include the Basic Authorization header
  • username/password is not admin/password the authorisation header value is base 64 encoded, and the details should not match admin as the username, and password for the password
  • add the X-CHALLENGER header to track progress and because the authentication code we need is asociated with the X-challenger session
  • Receive a 401 response

Basic Instructions

  • Create a new request for the /secret/token end point
    • if running locally that endpoint would be
      • http://localhost:4567/secret/token
    • if running in the cloud that endpoint would be
      • https://apichallenges.eviltester.com/secret/token
  • The verb should be a POST
  • Add a Basic Auth header by selecting “Basic” from the “Auth” tab and entering a username and password but make sure it is not admin/password e.g. use username “Admin1”, password “Pa55word” (or anything else you want)
  • There should be no payload in the message
  • You should receive a 401 response - meaning “Unauthorized” because you entered the wrong username or password
  • The request should have an X-CHALLENGER header to track challenge completion
> POST /secret/token HTTP/1.1
> Host: apichallenges.eviltester.com
> User-Agent: insomnia/2021.2.2
> X-CHALLENGER: x-challenger-guid
> Authorization: Basic YWRtaW46cGFzc3dvcmRk
> Accept: */*
> Content-Length: 0

< HTTP/1.1 401 Unauthorized
< Connection: close
< Date: Sat, 24 Jul 2021 11:13:04 GMT
< Www-Authenticate: Basic realm="User Visible Realm"
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: *
< X-Challenger: x-challenger-guid
< Content-Type: text/html;charset=utf-8
< Server: Jetty(9.4.z-SNAPSHOT)
< Via: 1.1 vegur

Note that the Authorization header does not send the username and password in plain text, it uses Base64 to obscure the details.

You could see what username and password I used by typing the Base64 string YWRtaW46cGFzc3dvcmRk into a Base64 decoder like https://www.base64decode.org/

Or you could decode it in the browser dev console by typing:

atob('YWRtaW46cGFzc3dvcmRk')

The command to encode a string as base64 is btoa

Note also that although we add an “Authorization” header, really we are trying to “authenticate” with a set of user details.

  • Authorization is “do you have the right permissions”
  • Authentication is “are you who you say you are”

Extras

  • try creating a base64 Authorization header by hand, without using the “Auth” tab in Insomnia

Overview Video

Watch on YouTube

Patreon ad free version

Learn More and Start Testing

If you like this content then you might be interested in my Patreon Community. I create exclusive content multiple times a week. Gain access to Patreon only content and online training courses for as little as $1 per month. Learn more about the EvilTester Patreon Community.

<< Q - Can we use Automated Execution to find defects? A - Yes
API Testing Challenges 31 - How To - forbidden secret note 403 >>