Нека изходим от началната точка – искаме 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 е подобен но предлага доста повече сигурност като например, че паролата е хеширана, има ограничение на броя опити, повече директиви и т.н…