Skip to main content

API Authentication

Use setAuthentication() for BASIC or FORM authentication. For bearer tokens, API keys, and cookies, add the relevant header before sending the request.


BASIC Authentication

Pass a username and password using AuthenticationType.BASIC:

APIAuthentication.java
import com.shaft.driver.SHAFT;
import com.shaft.api.RequestBuilder.AuthenticationType;

SHAFT.API api = new SHAFT.API("https://api.example.com");

api.get("/secure/data")
.setAuthentication("username", "password", AuthenticationType.BASIC)
.setTargetStatusCode(200)
;

FORM Authentication

Submit credentials as form parameters using AuthenticationType.FORM:

APIAuthentication.java
api.post("/login")
.setAuthentication("user@example.com", "password123", AuthenticationType.FORM)
.setTargetStatusCode(200)
;

OAuth2 Bearer Token

Add the Authorization header with a Bearer token prefix:

APIAuthentication.java
api.get("/oauth/resource")
.addHeader("Authorization", "Bearer your-oauth-token")
.setTargetStatusCode(200)
;

API Key Authentication

API Key in Header

APIAuthentication.java
api.get("/data")
.addHeader("X-API-Key", "your-api-key")
.setTargetStatusCode(200)
;

API Key in Query Parameter

APIAuthentication.java
api.get("/data")
.setUrlArguments("api_key=your-api-key")
.setTargetStatusCode(200)
;

Pass a session cookie using addHeader:

APIAuthentication.java
api.get("/profile")
.addHeader("Cookie", "session_id=abc123xyz; token=your-session-token")
.setTargetStatusCode(200)
;

Persistent headers and cookies

Use addHeader() or addCookie() on SHAFT.API when a token or cookie should be sent with later requests:

APIAuthentication.java
SHAFT.API api = new SHAFT.API("https://api.example.com");

api.addHeader("Authorization", "Bearer your-oauth-token");
api.addCookie("session_id", "your-session-id");
api.get("/users").setTargetStatusCode(200);

Complete Test Example

APIAuthTest.java
import com.shaft.driver.SHAFT;
import com.shaft.api.RequestBuilder.AuthenticationType;
import org.testng.annotations.Test;

public class APIAuthTest {

@Test
public void testBasicAuth() {
SHAFT.API api = new SHAFT.API("https://httpbin.org");
api.get("/basic-auth/user/pass")
.setAuthentication("user", "pass", AuthenticationType.BASIC)
.setTargetStatusCode(200)
;

api.assertThatResponse()
.extractedJsonValue("$.authenticated")
.isEqualTo("true");
}

@Test
public void testBearerToken() {
SHAFT.API api = new SHAFT.API("https://api.example.com");
api.get("/protected")
.addHeader("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")
.setTargetStatusCode(200)
;
}
}

tip

Store authentication credentials in SHAFT property files or environment variables — never hardcode tokens or passwords directly in test code.

warning

OAuth2 tokens expire. For CI/CD pipelines, implement a token-refresh step before your test suite runs or retrieve the token programmatically as part of test setup.