AngularJS: Где использовать обещания?

Сначала давайте определим некоторые термины:

  • RESTful: можно охарактеризовать приложения, соответствующие ограничениям REST, описанным в этом разделе, как «RESTful». [15] Если служба нарушает любые требуемые ограничения, ее нельзя считать RESTful. в соответствии с wikipedia .
  • ограничение безстоящих: мы добавим ограничение на взаимодействие клиент-сервер: связь должна быть неактивной по своей природе, например, в клиенте-безстоящем-сервере (CSS ) в разделе 3.4.3 (рисунок 5-3), так что каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для понимания запроса, и не может использовать любой сохраненный контекст на сервере. Таким образом, состояние сеанса полностью поддерживается клиентом. в соответствии с Fielding-диссертацией .

Таким образом, сеансы на стороне сервера нарушают ограничение без сохранения состояния REST и, следовательно, RESTfulness.

Таким образом, для клиента куки-файл сеанса точно такой же, как и любой другой механизм проверки подлинности на основе HTTP-заголовков, за исключением того, что он использует заголовок Cookie вместо авторизации или какого-либо другого проприетарного заголовка.

blockquote>

В сеансовых куках вы сохраняете состояние клиента на сервере, и ваш запрос имеет контекст. Попробуем добавить в вашу систему балансировку нагрузки и другой экземпляр службы. В этом случае вы должны делиться сеансами между экземплярами службы. Трудно поддерживать и расширять такую ​​систему, поэтому она плохо масштабируется ...

По-моему, в cookie нет ничего плохого. Технология cookie - это механизм хранения на стороне клиента, в котором сохраненные данные автоматически привязываются к заголовкам файлов cookie по каждому запросу. Я не знаю ограничения REST, которое имеет проблемы с такой технологией. Поэтому нет проблем с самой технологией, проблема заключается в ее использовании. Филдинг написал раздел о том, почему он считает, что файлы cookie HTTP плохие.

С моей точки зрения:

  • аутентификация не запрещается для RESTfulness (в противном случае использование RESTful-услуг мало используется).
  • аутентификация выполняется путем отправки маркера аутентификации в запросе, обычно это заголовок
  • , этот токен аутентификации должен быть полученным каким-то образом и может быть отменено, и в этом случае его необходимо обновить
  • , токен аутентификации должен быть проверен сервером (иначе это не было бы аутентификацией)
blockquote>

Ваша точка зрения была довольно твердой. Единственная проблема заключалась в концепции создания токена аутентификации на сервере. Тебе не нужна эта часть. Вам нужно хранить имя пользователя и пароль на клиенте и отправлять его с каждым запросом. Вам больше не нужно делать это, кроме HTTP basic auth и зашифрованного соединения:

Figure 1. - Stateless authentication by trusted clients [/g5]

  • Рисунок 1. - Без гражданства аутентификация доверенными клиентами

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

Теперь это работает довольно хорошо доверенными клиентами, написанными вами, но как насчет сторонних клиентов? Они не могут иметь имя пользователя и пароль и все разрешения пользователей. Таким образом, вы должны хранить отдельно, какие разрешения для стороннего клиента может иметь конкретный пользователь. Таким образом, клиентские разработчики могут регистрировать своих сторонних клиентов и получать уникальный ключ API, а пользователи могут разрешать сторонним клиентам получать доступ к некоторым их разрешениям. Как чтение имени и адреса электронной почты, а также перечисление их друзей и т. Д. После разрешения стороннего клиента сервер будет генерировать токен доступа. Этот токен доступа может использоваться сторонним клиентом для доступа к разрешениям, предоставленным пользователем, например:

Figure 2. - Stateless authentication by 3rd party clients [/g6]

  • Рисунок 2. - Аутентификация без аутентификации сторонними клиентами

Таким образом, сторонний клиент может получить токен доступа от доверенного клиента (или непосредственно от пользователя). После этого он может отправить действительный запрос с помощью ключа API и доступа к токену. Это самый основной сторонний механизм авторизации. Вы можете больше узнать о деталях реализации в документации каждой сторонней системы auth, например. OAuth. Конечно, это может быть более сложным и более безопасным, например, вы можете подписывать детали каждого отдельного запроса на стороне сервера и отправлять подпись вместе с запросом и т. Д. Фактическое решение зависит от потребности вашего приложения.

141
задан Setily 21 September 2016 в 08:16
поделиться