Що е HTTP Authentication и има ли то почва у нас?

Нека изходим от началната точка – искаме HTTP аутентикация. Стандартният начин е чрез cookies. Но самият HTTP протокол предлага и чисто свой начин.

HTTP аутентикацията е процес, минаващ през серия от рекуести и респонси, които най-просто могат да се илюстрират така:

Първо клиентът отправя HTTP заявка.

На която сървът отговаря „не давам без да се аутентикираш кой си“, чрез хедърът WWW-Authenticate и статус кодът 401. Само един от тези (хедър и код) достатъчен ли е? То няма как. Един HTTP респонс от какво се състои? От status line, хедъри и евентуално body. Нещо такова:

HTTP/1.1 200 OK
Content-Type: text/plain

This is the response body bla bla bla

Демек, няма как да отговорим само с код или само хедър, респонсът е нещо цяло, атомарно, което трябва да има и двете, такъв е протоколът.

HTTP дава два начина за аутентикация – Basic и Digest.

Basic е по-простият начин, сървът изпраща към клиента хедърът WWW-Authenticate и статус кодът 401 като с директивата realm (задължително) задава и за кой realm иска юзър и парола. Например:

WWW-Authenticate: realm="Videos"

Клиентът има юзър и парола, които трябва първо да конкатенира с двуеточие, например alfons:123123, след което полученият стринг да бъде Base64 енкоднат и изпратен на сърва с хедъра Authorization. Например:

Authorization: Basic YWxmb25zOjEyMzEyMw==

Digest е подобен но предлага доста повече сигурност като например, че паролата е хеширана, има ограничение на броя опити, повече директиви и т.н…