Authentication header
Hii ni header ambayo ina kazi ya ya kuweka utambulisho kwenye hiyo request. Yenyewe hutumika kuthibitisha uhalali wa mtumiaji kama anastahiki kfanya hiyo request. Hivyo inaweza kumzuia ama kumruhusu. Mfano kutuma jina la mtumiaji na password kwa ajili ya ku login na vitu vingine. Ama kuthibitisha session. Pia hii inaweza kutumika kutuma authentication token kwenye server.
Ni ipi kazi kuu ya authentication header?
Kazi kuu ya authentication header ni kuhakikisha kuwa taarifa haibadilishwi wakati inapotumwa kutoka kwa cliect kwenda kwa server ama kutoka kwa server kwenda kwa client. Hii huboresha usalama kwani hacker anaweza kubadili taarifa hizi kama hazitakuwa salama na kuweza kusababisha hasara.
Ili kufanya authentication header kuna hatuwa tatu zinapitiwa:-
-
Kufanya encoding ya data husika.
Encoding ni kubadilidata kutoka hali ya kawaida na kuwa katika hali nyingine ambayo binadamu hawezi kuisoma hiyo data. Na kuzirudisha kunatumika decoding.
Encoding inayotumiwa hapa ni base64. Ambapo tunatumia functio hii base64_encode() ndan yake tunaweka hizo data. Kama data ni nyingi utazitenganisha kwa alama ya coloni yaani zile nukta pacha (:).
Mfano
Tunataka ku encode jina na password. Tuseme jina ni Bongoclass na password ni BCG123. Hivyo data zitakuwa hivi:
<?php
$username = 'Bongo';
$password = 'BCG123';
$auth = base64_encode("$username:$password");
//jarbu uprnt output taupa uZ286QkNHMTIz
echo $auth;
Sasa utaona hapo ama uta output hzo encoded data utapata Qm9uZ286QkNHMTIz ambapo h n data ambayo po encoded. Na utaa u decode utatuma base64_decode()
Mfano:
<?php
$encoded_data = "Qm9uZ286QkNHMTIz";
echo base64_decode($encoded_data);
Itakupa Bongo:BCG123
-
Utengeneza context data
Hapa tunawenda uandaa fungu cha data wa ajili ya kutumiwa kwenda kwenye server.
Kwanza data zetu tutaziweka kwenye array. Katika array yetu tatukwenda kuweka header na method. Method ninamanisha method ambazo hutumika kusend request. Kama vile get na post. Kisha tutatukwa na header ambayo itakuwani authorization basic
Aina ya array tutakayotumia ni associative array ambayo nakuwa na keys.
Mafano:
$header_data = array(
'http' => array(
'method' => 'GET',
'header' => "Authorization: Basic $auth\r\n"
)
);
Utaona hapo method ni GET na aina ya Authorization ni Basic ni ya kawaida tu kwa ajili ya kufanya authentication.
Baada ya kuziweka data zetu kwenye array hatuwa inatofuata ni kutengeneza context data kwa ajili ya kutuma kwenda kwenye server. Tutatumia function ya stream_context_create() ili kutuma data
Context data ni nini?
Hizi ni mkusanyiko wa data kama aramenta na taarifa nyinginezo ambazo hujitajika wakati wa kuwasiliana na server. Huweza kutengenezwa kwa kutumia function hiyo nilioitaja hapo juu na hutumia associative array..Zenyewe zinakuwa zinabeba taarifa kuhusu huo mkondo wa data kama tabia na seting nyinginezo. Kama tulivyoweka hapo juu metod na header information.
Mfano:
<?php
$username = 'Bongo';
$password = 'BCG123';
$auth = base64_encode("$username:$password");
$header_data = array(
'http' => array(
'method' => 'GET',
'header' => "Authorization: Basic $auth\r\n"
)
);
$context = stream_context_create($header_data);
?>
Sasa mpaa ufa hapo tutauwa tumeshatuma hzo taarfa wenda wenye server. Wa upande wa server anapotuna response ss tunaweza utuma function ya fle_get_contents() tutakuja kujifunza kwenye somo la API
Pia tunaweza kutuma data hizo kwa kutumia curl
$username = "Bongo";
$password = "BCG123";
$auth = base64_encode("$username:$password");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.example.com/data");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"Authorization: Basic $auth"
));
$response = curl_exec($curl);
curl_close($curl);
?>
Tutakuja kujifunza vizuri kuhusu curl kwenye somo la API
Unaweza uchanganya taafifa za aina mbalimbali kwenye context data zako. Angali mfano hapo chini:
<?php
$context_data = array(
'http' => array(
'method' => 'POST', // HTTP method
'header' => "Authorization: Bearer YOUR_ACCESS_TOKEN\r\n" .
"Content-Type: application/json\r\n",
'content' => json_encode(array('key1' => 'value1', 'key2' => 'value2')), // POST data
'timeout' => 30 // Timeout in seconds
),
'ssl' => array(
'verify_peer' => true,
'verify_peer_name' => true,
'cafile' => '/path/to/cacert.pem' // Path to Certificate Authority file
)
);
// Create the context resource
$context = stream_context_create($context_data);
?>
Kwa upande wa server:
Sasa kwa upande wa server tunaweza kusoma hizo data zilizotumwa kwa kutumia server variable mfabo
Upata username tutatuma $_SERVER['PHP_AUTH_USER']; na upata password tutatuma $_SERVER['PHP_AUTH_PW'];
Pia ili kuangalia kama mtumiaji yupo authenticated tutatumia isset()
Mfano:
<?php
// Check if the user has provided credentials
if (!isset($_SERVER['PHP_AUTH_USER'])) {
// If not, send a 401 Unauthorized response and the WWW-Authenticate header
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="My Realm"');
echo 'Authentication required.';
exit;
} else {
// Validate the provided credentials
$username = $_SERVER['PHP_AUTH_USER'];
$password = $_SERVER['PHP_AUTH_PW'];
// Example credentials for validation
$valid_username = 'admin';
$valid_password = 'password';
if ($username === $valid_username && $password === $valid_password) {
echo 'You are authenticated!';
} else {
// If credentials are invalid, prompt again
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="My Realm"');
echo 'Invalid credentials.';
exit;
}
}
?>
Hayo majibu yatatumwa kwenda kwa mtumiaji kupitia API. tutakuja kujifunza vizuri kwenye somo la API. nadhani hapo utajiuliza kuhusu realm = “My Realm” hii ni kiwakilishi kuwakilisha hizo data. Hatuwezi kurudisha majibu kuonyesha data ambazo zimetumwa kuwa zio sahiahi, badi hayo maneno yanawakilisha izo data.
Aina za authenticatio header:
-
Basic authentcaton
Hii hutumika kawaida sana kwa ajili ya kutuma taari sensitive kama za password na username. Hii ni kama ambavyo tumeona hapo juu. Hii inatumia basic kama keyword yake kutambulisha ni aina gani ya authentication ili server ijuwe inachakata vipi data
<?php
$username = 'your_username';
$password = 'your_password';
$context = stream_context_create([
'http' => [
'header' => 'Authorization: Basic ' . base64_encode("$username:$password")
]
]);
?>
-
Bearer Token Authentication
Hii hutumika kwa ajili ya kutuma API token. Hii hutumia bearer keyword kutambulisha aina gani ya header.
Mfano:
<?php
$token = 'your_token';
$context = stream_context_create([
'http' => [
'header' => 'Authorization: Bearer ' . $token
]
]);
Na kwenye server ili kuzisoma tutatumia server variable ya HTTP_AUTHORIZATION au REDIRECT_HTTP_AUTHORIZATION. Ili kuweza kutenganisha token tutatumia preg_match() function
Mfano
<?php
// Check if the Authorization header is set
if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
$authHeader = $_SERVER['HTTP_AUTHORIZATION'];
} elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
$authHeader = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
}
if (isset($authHeader)) {
$matches = [];
if (preg_match('/Bearer\s(\S+)/', $authHeader, $matches)) {
$token = $matches[1];
// Validate token
if ($token == 'your_token') {
echo 'Access granted';
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}Na kwenye server ili kuzisoma tutatumia server variable ya
HTTP_AUTHORIZATION au REDIRECT_HTTP_AUTHORIZATION. Ili
kuweza kutenganisha token tutatumia preg_match() function
Mfano
<?php
// Check if the Authorization header is set
if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
$authHeader = $_SERVER['HTTP_AUTHORIZATION'];
} elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
$authHeader = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
}
if (isset($authHeader)) {
$matches = [];
if (preg_match('/Bearer\s(\S+)/', $authHeader, $matches))
{
$token = $matches[1];
// Validate token
if ($token == 'your_token') {
echo 'Access granted';
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
?>
-
Custom Token Authentication
Hii hutumika unapotaka kufanya customization ya data zako unazotuma
kwenye header. Ni kama tulivyojifunza kwenye custom header
Mfano:
<?php
$token = 'your_custom_token';
$context = stream_context_create([
'http' => [
'header' => 'X-Auth-Token: ' . $token
]
]);
?>
Kwenye server
Pia tunaweza kutumia server variable ama kwa kutumia function ya apache_request_headers()
<?php
$headers = apache_request_headers();
if (isset($headers['X-Auth-Token'])) {
$token = $headers['X-Auth-Token'];
// Validate token
if ($token == 'your_custom_token') {
echo 'Access granted';
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
Ama kwa kutumia server variable
<?php
// Check if the X-Auth-Token header is set
if (isset($_SERVER['HTTP_X_AUTH_TOKEN'])) {
$token = $_SERVER['HTTP_X_AUTH_TOKEN'];
// Validate token
if ($token == 'your_custom_token') {
echo 'Access granted';
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
} else {
header('HTTP/1.0 401 Unauthorized');
echo 'Unauthorized';
}
?>
Function ya apache_request_headers()
Inaweza kutumika pia kusoma data kutokakwenye header nyinginezo. Hapa nimeiweka tu ili kuitambulisha. Tutakwenda kuitumia vizuri mbeleni .