אימות גישה בסיסי

בהקשר של פרוטוקול HTTP, **אימות גישה בסיסי** הוא שיטה עבור משתמש HTTP (למשל דפדפן אינטרנט) לספק שם משתמש וסיסמה בעת ביצוע בקשה. באימות HTTP בסיסי, בקשה מכילה שדה כותרת בצורה של , כאשר `credentials` הם קידוד Base64 של מזהה וסיסמה, שביניהם סימן נקודתיים (:).

האימות יושם במקור על ידי ארי לוטונן ב-CERN בשנת 1993 והוגדר במפרט HTTP 1.0 בשנת 1996. האימות נכלל במפרט  משנת 2015, שהחליף את מפרט  משנת 1999.

## מאפיינים
יישום HTTP Basic Authentication (BA) הוא הטכניקה הפשוטה ביותר לאכיפת בקרות גישה למשאבי אינטרנט מכיוון שהיא אינה דורשת קובצי עוגייה, מזהי סשן או עמוד התחברות; במקום זאת, אימות HTTP Basic משתמש בשדות סטנדרטיים בכותרת HTTP.

## אבטחה
מנגנון BA אינו מספק הגנת אבטחת מידע עבור האישורים המועברים. הם רק מקודדים עם Base64 במעבר ואינם מוצפנים או מגובבים בשום צורה. בעל הגישה לכותרת מקבל גישה לסיסמה, באמצעות קידוד מבסיס 64 חזרה ל-ASCII. לכן, בדרך כלל נעשה שימוש באימות בסיסי בשילוב עם HTTPS כדי לספק הגנה על הסיסמה.

מכיוון ששדה BA חייב להישלח בכותרת של כל בקשת HTTP, דפדפן האינטרנט צריך לשמור במטמון אישורים למשך פרק זמן סביר כדי להימנע מלבקש מהמשתמש כל הזמן את שם המשתמש והסיסמה שלו. מדיניות האחסון במטמון משתנה בין דפדפנים.

HTTP אינו מספק שיטה לשרת אינטרנט להורות ללקוח "לצאת" מהמשתמש. עם זאת, ישנן שיטות לנקות אישורים שמורים בדפדפני אינטרנט מסוימים. אחת מהן היא הפניית המשתמש לכתובת URL באותו דומיין, תוך שימוש באישורים שגויים בכוונה. עם זאת, התנהגות זו אינה עקבית בין דפדפנים וגרסאות דפדפן שונות. Microsoft Internet Explorer מציע פונקציית JavaScript ייעודית לניקוי אישורי קובץ שמור:
```html
<script>document.execCommand('ClearAuthenticationCache');</script>
```


בדפדפנים מודרניים, אישורים המאוחסנים במטמון עבור אימות בסיסי נמחקים בדרך כלל בעת ניקוי היסטוריית הגלישה. רוב הדפדפנים מאפשרים למשתמשים לנקות באופן ספציפי רק אישורים, אם כי האפשרות עשויה להיות קשה לאיתור, ובדרך כלל מנקה אישורים עבור כל האתרים שבוקרו.

שימוש בכוח גס אינו נמנע או מזוהה באופן אקטיבי (אלא אם כן נעשה שימוש במנגנון בצד השרת).

## פרוטוקול
### בצד השרת
כאשר השרת רוצה שהדפדפן יאמת את עצמו כלפי השרת לאחר קבלת בקשה לא מאומתת, עליו לשלוח תגובה עם שורת מצב HTTP 401 - לא מורשה ושדה כותרת *WWW-Authenticate*.

שדה הכותרת של WWW-Authenticate עבור אימות בסיסי בנוי באופן הבא:

`
WWW-Authenticate: Basic realm="User Visible Realm"
`

השרת עשוי לבחור לכלול את פרמטר ערכת התווים מ-:

`
WWW-Authenticate: Basic realm="User Visible Realm", charset="UTF-8"
`

פרמטר זה מציין שהשרת מצפה מהלקוח להשתמש ב-UTF-8 לקידוד שם משתמש וסיסמה.

### בצד הלקוח
כאשר הדפדפן רוצה לשלוח אישורי אימות לשרת, הוא משתמש בשדה כותרת "הרשאה".

שדה כותרת ההרשאה בנוי באופן הבא:

# שם המשתמש והסיסמה, וביניהם תו בודד של נקודתיים (:). המשמעות היא ששם המשתמש עצמו אינו יכול להכיל נקודתיים.
# המחרוזת המתקבלת מקודדת לרצף אוקטטים. ערכת התווים לשימוש עבור קידוד זה אינה מוגדרת כברירת מחדל, כל עוד היא תואמת ל-US-ASCII, אך השרת עשוי להציע שימוש ב-UTF-8 על ידי שליחת פרמטר ערכת תווים.
# המחרוזת המתקבלת מקודדת באמצעות גרסה של Base64 (+/ ועם ריפוד).
# שיטת ההרשאה ותו רווח (למשל, "Basic ") מוצמד לפני המחרוזת המקודדת.

לדוגמה, אם הדפדפן משתמש ב-Aladdin כשם המשתמש ו-open sesame כסיסמה, אז ערך השדה הוא הקידוד Base64 של Aladdin:open sesame, או QWxhZGRpbjpvcGVuIHNlc2FtZQ==. לאחר מכן יופיע שדה כותרת ההרשאה כ:

`
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
`

## הערות שוליים

קטגוריה:HTTP