2015-08-25 2 views
1

В этой ситуации вы можете реализовать «поток кода авторизации»?Приложение Javascript с потоком авторизации кода OAuth2?

Одиночная приложение страница www.app.com

Отдыхают бэкенд в www.backend.com

можно получить с помощью яваскрипта с «код авторизации», а затем передать его для «бэкэнд» для этого получить «токен доступа»?

ответ

1

Это возможно путем установки redirect_uri к где-то в вашем SPA, пикап code от ответа авторизации (с использованием любого из методов, описанных в How to get the value from the GET parameters?) и передать его на внутренний интерфейс в прикладном определенном образе. При использовании OpenID Connect есть опция, чтобы иметь code, доставленный во фрагменте redirect_uri, который имеет некоторые преимущества безопасности перед тем, как он был доставлен в качестве параметра запроса.

+0

Ханс, это решение небезопасно? Почему единственный способ, который все упоминают, - это «неявный поток»? Спасибо :) – lascarayf

+0

Знаете ли вы блог, в котором объясняется, как использовать «поток сервера» для SPA? – lascarayf

+0

, имеющий токен, поставляемый в Javascript SPA, по своей сути менее безопасен, чем доставка его на сервер, потому что не может быть задействован секрет клиента; если у вас есть код сервера, который вы можете использовать (что делает ваш SPA не SPA больше), примените стандартный разрешающий код авторизации –

2

Теоретически использование потока кода авторизации (или гибридного потока) с помощью приложения 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 для извлечения кода авторизации из строки запроса или из фрагмента.

Смежные вопросы