Barcha qo'llanmalar

HTTP Basic Authentication

HTTP Basic Authentication nima ekanligini va uni Node.js'da qanday implement qilishni o'rganing

Muallif: Kamran Ahmed

Oldingi qo'llanmamiz authentication asoslari haqida edi; unda biz authentication, authorization, authentication turlari, authentication factor'lari, authentication strategiyalari va boshqa mavzularni muhokama qilgandik.

Bugungi qo'llanmada biz basic authentication haqida o'rganamiz va Node.js'da Basic Authentication'ni qanday implement qilish mumkinligini ko'rib chiqamiz. Bizda basic authentication bo'yicha vizual qo'llanma va tushuntiruvchi video bor — quyidagi videoni tomosha qiling yoki o'qishda davom eting:

Basic authentication nima?

"Basic Authentication" nomiga qarab, Basic Authentication'ni standart username va password orqali authentication bilan adashtirmasligingiz kerak. Basic authentication HTTP spetsifikatsiyasining bir qismi bo'lib, uning tafsilotlarini RFC7617'da topish mumkin.

U HTTP spetsifikatsiyalarining bir qismi bo'lgani uchun barcha brauzerlar "HTTP Basic Authentication"'ni native tarzda qo'llab-quvvatlaydi. Quyida Google Chrome'dagi implementatsiyadan olingan skrinshot berilgan.

Chrome'dagi Basic Authentication

U qanday ishlaydi?

Endi basic authentication nima ekanligini bilganimizdan so'ng, savol tug'iladi: u qanday ishlaydi? Javob shunday: uni server'ning javobi boshqaradi.

1-qadam

Brauzer server'ga birinchi marta so'rov yuborganida, server so'rovda Authorization header'i bor-yo'qligini tekshiradi. Bu birinchi so'rov bo'lgani uchun so'rovda Authorization header'i topilmaydi. Shu sababli server 401 Unauthorized response code bilan javob beradi va qiymati Basic qilib belgilangan WWW-Authenticate header'ini ham yuboradi; bu brauzerga basic authentication flow'ini ishga tushirish kerakligini bildiradi.

401 Unauthorized
WWW-Authenticate: Basic realm='user_pages'

Javobga e'tibor bersangiz, bizda realm deb ataladigan qo'shimcha parametr bor; bu shunchaki bir xil credential'lardan foydalanadigan sahifalar guruhiga berilgan qiymat.

Brauzer credential'ni keshlash uchun realm'dan foydalanishi mumkin. Keyinchalik authentication muvaffaqiyatsiz bo'lganda brauzer domain'ning shu realm'i uchun keshda credential'lar bor-yo'qligini tekshiradi va o'sha credential'lardan foydalanishi mumkin.

2-qadam

Server'dan javobni olgach, brauzer WWW-Authenticate header'ini payqaydi va authentication popup'ini ko'rsatadi.

Chrome'dagi Basic Authentication

3-qadam

Foydalanuvchi credential'larni shu authentication popup'i orqali yuborganidan so'ng, brauzer credential'larni avtomatik ravishda base64 encoding yordamida kodlaydi va ularni xuddi shu so'rovning Authorization header'ida yuboradi.

4-qadam

So'rovni qabul qilgach, server credential'larni dekodlaydi va tekshiradi. Agar credential'lar to'g'ri bo'lsa, server client'ga javobni yuboradi.

Basic Authentication mana shunday ishlaydi.

Node.js'da Basic authentication

Men Node.js'da namunaviy loyiha tayyorladim, uni GitHub'da kamranahmedse/node-basic-auth-example manzilida topishingiz mumkin. Loyihaning codebase'iga qarasangiz, bizda ikkita fayl bor; index.js quyidagi tarkibga ega:

// src/index.js

const express = require('express');
const authMiddleware = require('./auth');

const app = express();
const port = 3000;

// This middleware is where we have the
// basic authentication implementation
app.use(authMiddleware);

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`App running @ http://localhost:${port}`);
});

Ko'rib turganingizdek, bu shunchaki oddiy express server. "Basic Authentication" uchun barcha kod authMiddleware ro'yxatdan o'tkaziladigan joyda joylashgan. Middleware'ning tarkibi quyidagicha:

// src/auth.js
const base64 = require('base-64');

function decodeCredentials(authHeader) {
  // ...
}

module.exports = function (req, res, next) {
  // Take the header and decode credentials
  const [username, password] = decodeCredentials(
    req.headers.authorization || ''
  );

  // Verify the credentials
  if (username === 'admin' && password === 'admin') {
    return next();
  }

  // Respond with authenticate header on auth failure.
  res.set('WWW-Authenticate', 'Basic realm="user_pages"');
  res.status(401).send('Authentication required.');
};

Node.js'da basic authentication mana shunday implement qilinadi.

Yo'l xaritalariQo'llanmalarFAQYouTube

yo'lxaritaroadmap.shasosida

Hamjamiyat tomonidan yaratilgan yo'l xaritalari, eng yaxshi amaliyotlar, loyihalar, maqolalar, manbalar va yo'nalishlar — o'z yo'lingizni tanlash va kasbingizda o'sish uchun.

© yo'lxarita·Shartlar·Maxfiylik·

roadmap.sh

Barcha kontent roadmap.sh loyihasidan olingan (© Kamran Ahmed) va shaxsiy o'rganish uchun o'zbek tiliga tarjima qilinmoqda.

Qidiruv

Yo'l xaritalari, loyihalar va savollarni qidiring