Authentication and Passport.js

Agenda

  • Виды аутентификации
  • Знакомство с Passport.js
  • Пример авторизации на Passport.js

Identification

 

заявление о том, кем вы являетесь. В зависимости от ситуации, это может быть имя, адрес электронной почты, номер учетной записи, и т. д.

Authentication

предоставление доказательств, что вы на самом деле есть тот, кем идентифицировались

Authorization

проверка, что вам разрешен доступ к запрашиваемому ресурсу.

Tipes of authentication

Password auth

Basic

+

  • простая в реализации

-

  • ненадежная
  • неконфигурируемая
  • устаревшая

Forms

+

  • конфигурируемая
  • множество вариантов реализации

-

  • встречаются ошибки в реализации
  • токен доступа может перехватить злоумышленник

Implementation errors

  • Веб-приложение позволяет пользователям создавать простые пароли.
  • Веб-приложение не защищено от возможности перебора паролей.
  • Веб-приложение само генерирует и распространяет пароли пользователям, однако не требует смены пароля после первого входа (т.е. текущий пароль где-то записан).
  • Веб-приложение допускает передачу паролей по незащищенному HTTP-соединению либо в строке URL.
  • Веб-приложение не использует безопасные хэш-функции для хранения паролей пользователей.
  • Веб-приложение не предоставляет пользователям возможность изменения пароля либо не нотифицирует пользователей об изменении их паролей.
  • Веб-приложение не требует повторной аутентификации пользователя для важных действий: смена пароля, изменения адреса доставки товаров и т. п.
  • Веб-приложение создает session tokens таким образом, что они могут быть подобраны или предсказаны для других пользователей.

Sertificate auth

+

  • один из самых безопасных способов аутентификации

-

  • трудности в распространении и поддержке сертификатов
  • не всегда удобна для пользователей

Two factors auth

+

  • Дополнительный фактор аутентификации позволяет добиться большей защиты

-

  • Более тяжелая в реализации, чем forms auth

By token auth

Text

+

  • удобная для пользователя
  • надежная (при условии, что identity provider - надежный ресурс)
  • нет больших трудностей в реализации

-

  • могут быть проблемы с безопасностью, если identity provider - ненадежный ресурс

Token formats

Simple Web Token (SWT) — наиболее простой формат, представляющий собой набор произвольных пар имя/значение в формате кодирования HTML form. Стандарт определяет несколько зарезервированных имен: Issuer, Audience, ExpiresOn и HMACSHA256. Токен подписывается с помощью симметричного ключа, таким образом оба IP- и SP-приложения должны иметь этот ключ для возможности создания/проверки токена.

Пример после декодирования:

Issuer=http://auth.myservice.com&
Audience=http://myservice.com&
ExpiresOn=1435937883&
UserName=John Smith&
UserRole=Admin&
HMACSHA256=KOUQRPSpy64rvT2KnYyQKtFFXUIggnesSpE7ADA4o9w

Simple Web Token

JSON Web Token

JSON Web Token (JWT) — содержит три блока, разделенных точками: заголовок, набор полей (claims) и подпись. Первые два блока представлены в JSON-формате и дополнительно закодированы в формат base64. Набор полей содержит произвольные пары имя/значения.

Пример после декодирования:

{ «alg»: «HS256», «typ»: «JWT» }.
{ «iss»: «
auth.myservice.com», «aud»: «myservice.com», «exp»: «1435937883», «userName»: «John Smith», «userRole»: «Admin» }.
S9Zs/8/uEGGTVVtLggFTizCsMtwOJnRhjaQ2BMUQhcY

SAML

Security Assertion Markup Language (SAML) — определяет токены (SAML assertions) в XML-формате, включающем информацию об эмитенте, о субъекте, необходимые условия для проверки токена, набор дополнительных утверждений (statements) о пользователе. Подпись SAML-токенов осуществляется при помощи ассиметричной криптографии.

Passport.js

Some words about passport.js

Passport - это простое в использовании middleware для приложений, построенных на Node.js с использованием фреймворка express.

Passport отлично справляется с тем, чтобы отделить аутентификацию от другой логики приложения. Это позволяет легко встроить Passport в любое веб-приложение, построенное на Express, так же, как мы настраиваем другой middleware для Express, например logger, body-parser, cookie-parser, session-handler и т. д.

Passport.js strategies

Some words about strategies

Для аутентификации Passport использует отдельные модули, которые предоставляют различные стратегии аутентификации. Сегодня Passport располагает более чем 140 стратегиями аутентификации. Вы можете использовать local/remote аутентификацию  или использовать single sign-on использованием OAuth для Facebook, Twitter, Google и т. д. Все эти стратегии независимы друг от друга и упакованы в виде отдельных модулей, которые не включены по умолчанию, когда вы устанавливаете Passport's middleware.

Authentication example

deck

By shutya

deck

  • 655