Sobes.tech
Middle

Какво е OAuth автентикация и как работи?

sobes.tech AI

Отговор от AI

OAuth е отворен стандарт за авторизация. Той позволява на потребителя да предостави ограничен достъп до своите данни, съхранявани на друг сървър (ресурсен сървър), без да е необходимо да предава своите идентификационни данни (потребителско име/парола) на това приложение.

Работата на OAuth се основава на издаването на "токени за достъп" вместо идентификационни данни. Типичният поток изглежда така:

  1. Заявка за авторизация: Потребителят се опитва да извърши действие в трето приложение, което изисква достъп до данни от ресурсния сървър. Приложението инициира заявка за авторизация към сървъра за авторизация на ресурсния сървър.
  2. Пренасочване към сървъра за авторизация: Потребителят бива пренасочен към страницата на сървъра за авторизация.
  3. Аутентикация на потребителя: Потребителят се аутентифицира на сървъра за авторизация (ако все още не е аутентифициран).
  4. Съгласие на потребителя (Consent): Сървърът за авторизация иска разрешение от потребителя за предоставяне на определено ниво на достъп до данните му (scopes). Потребителят или съгласява, или отказва заявката.
  5. Издаване на код за авторизация: Ако потребителят е съгласен, сървърът за авторизация пренасочва потребителя обратно към трето приложение, предоставяйки "код за авторизация".
  6. Обмен на код за авторизация за токен за достъп: Третото приложение, получило кода за авторизация, прави директен заявка към сървъра за авторизация за обмен на този код за "токен за достъп" (Access Token) и по желание "токен за обновяване" (Refresh Token). Тази заявка се извършва между сървърите, без участието на браузъра на потребителя, което повишава сигурността.
  7. Достъп до данните: Третото приложение използва получения токен за достъп за изпълнение на заявки към ресурсния сървър от името на потребителя. При всяка такава заявка токенът за достъп се изпраща в заглавката.
  8. Валидиране на токена: Ресурсният сървър валидира токена за достъп и, ако той е валиден и съответства на изискваните 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 за създаване на собствен сървър за авторизация.