Теоретически использование потока кода авторизации (или гибридного потока) с помощью приложения JS/mobile/desktop вполне возможно, и вам даже не нужно хранить учетные данные клиента для этого (вы могли бы, конечно, но извлечение их настолько просто, что было бы бессмысленно).
Вопреки распространенному мнению, проверка подлинности клиента не требуется для «открытых» приложений (то есть приложений, которые не могут безопасно хранить свои учетные данные, которые включает в себя JS приложения) при использовании потока кода авторизации:
, если клиент тип является конфиденциальным или клиенту выдают клиентские значения (или назначены другие требования к аутентификации), клиент ДОЛЖЕН пройти аутентификацию с сервера авторизации, как описано в разделе 3.2.1.
https://tools.ietf.org/html/rfc6749#section-4.1.3
е Клиентом является Конфиденциальный клиент, то он должен проверить подлинность лексему Endpoint, используя метод аутентификации, зарегистрированного для его client_id, как описано в разделе 9.
http://openid.net/specs/openid-connect-core-1_0.html#TokenRequest
На практике я уверен, что большинство серверов авторизации/аутентификации будут обеспечивать соблюдение авторизации клиента при использовании потока кода авторизации и вместо этого рекомендует использовать неявный поток для общедоступных приложений.
Если сервер авторизации поддерживает этот сценарий, используя поток кода авторизации в вашем JS приложение должно быть легко, если вы используете response_mode=query
(или лучше: response_mode=fragment
как предложено @Hans), так как вы можете использовать вашу главную страницу JS как redirect_uri
и использовать некоторые JS для извлечения кода авторизации из строки запроса или из фрагмента.
Ханс, это решение небезопасно? Почему единственный способ, который все упоминают, - это «неявный поток»? Спасибо :) – lascarayf
Знаете ли вы блог, в котором объясняется, как использовать «поток сервера» для SPA? – lascarayf
, имеющий токен, поставляемый в Javascript SPA, по своей сути менее безопасен, чем доставка его на сервер, потому что не может быть задействован секрет клиента; если у вас есть код сервера, который вы можете использовать (что делает ваш SPA не SPA больше), примените стандартный разрешающий код авторизации –