Какво е OAuth автентикация и как работи?
sobes.tech AI
Отговор от AI
OAuth е отворен стандарт за авторизация. Той позволява на потребителя да предостави ограничен достъп до своите данни, съхранявани на друг сървър (ресурсен сървър), без да е необходимо да предава своите идентификационни данни (потребителско име/парола) на това приложение.
Работата на OAuth се основава на издаването на "токени за достъп" вместо идентификационни данни. Типичният поток изглежда така:
- Заявка за авторизация: Потребителят се опитва да извърши действие в трето приложение, което изисква достъп до данни от ресурсния сървър. Приложението инициира заявка за авторизация към сървъра за авторизация на ресурсния сървър.
- Пренасочване към сървъра за авторизация: Потребителят бива пренасочен към страницата на сървъра за авторизация.
- Аутентикация на потребителя: Потребителят се аутентифицира на сървъра за авторизация (ако все още не е аутентифициран).
- Съгласие на потребителя (Consent): Сървърът за авторизация иска разрешение от потребителя за предоставяне на определено ниво на достъп до данните му (scopes). Потребителят или съгласява, или отказва заявката.
- Издаване на код за авторизация: Ако потребителят е съгласен, сървърът за авторизация пренасочва потребителя обратно към трето приложение, предоставяйки "код за авторизация".
- Обмен на код за авторизация за токен за достъп: Третото приложение, получило кода за авторизация, прави директен заявка към сървъра за авторизация за обмен на този код за "токен за достъп" (Access Token) и по желание "токен за обновяване" (Refresh Token). Тази заявка се извършва между сървърите, без участието на браузъра на потребителя, което повишава сигурността.
- Достъп до данните: Третото приложение използва получения токен за достъп за изпълнение на заявки към ресурсния сървър от името на потребителя. При всяка такава заявка токенът за достъп се изпраща в заглавката.
- Валидиране на токена: Ресурсният сървър валидира токена за достъп и, ако той е валиден и съответства на изискваните scope, предоставя достъп до данните.
OAuth предлага няколко потока (flows), подходящи за различни сценарии, например:
- Authorization Code Flow: Най-сигурният, използва се за уеб приложения с сървърна част.
- Implicit Flow: Използван е за уеб приложения без сървърна част, но е остарял.
- Client Credentials Flow: За приложения, които получават достъп до собствените си ресурси, а не до потребителски.
- Resource Owner Password Credentials Flow: Не се препоръчва, предава потребителските идентификационни данни на приложението.
(Пример за Authorization Code Flow)
В C# за реализиране на OAuth в уеб приложения често се използват библиотеки като ASP.NET Core Identity с различни доставчици (Google, Facebook и др.), или библиотеки като IdentityServer за създаване на собствен сървър за авторизация.