2015-07-13 3 views
0

У нас есть открытый API, который мы бы хотели защитить с помощью OAuth2.OAuth2 в браузере-приложении Использование разрешения на предоставление разрешения вместо неявного

Я читал в спецификации/документации, но у меня все еще есть некоторые вопросы о неявном гранте.

Я понимаю, что неявный грант используется только для клиентских приложений in-browser- (javascript) -apps. Он менее безопасен и поэтому возможности должны быть ограничены (например, доступ только для чтения). Кроме того, не нужно выдавать токены обновления, и токен не должен быть долговечным.

Но что заставляет создателя in-browser- (js) -app использовать грант Authz вместо неявного гранта? Как создатель такого приложения есть преимущество, что я могу получить больше разрешений для создания (деструктивных) вещей и получить токен обновления, который я могу использовать для получения новых access_tokens, когда они истекают. Это последнее идеально, потому что мне не придется часто путать моих пользователей с логином.

Это, конечно, проблематично, потому что refresh_token, client_id и client_secret легко скомпрометированы таким образом.

Таким образом, вопрос в основном вращается вокруг этого: Как я могу убедиться, что только в браузере-приложения будет использоваться ограниченный неявный грант?

Перед тем как иметь возможность подключиться к нашему api, используя OAuth, клиент/разработчик должен зарегистрироваться для client_id, callback_url, client_secret. Для меня (как владельца api) возможно отменить это разрешение, если я обнаруживаю такое поведение. Но это означает, что мне придется проверять все вручную и периодически?

Есть ли лучший способ?

ответ

0

Одним из вариантов было бы полагаться на заголовок агента пользователя, как клиент веб-приложение не может повлиять на его (это браузер посылает запросы!)

Вы можете рассмотреть отрицая выдаче маркера, если cliend_id и client_secrets являются используется в сочетании с пользовательским агентом, поступающим из браузера. Вы можете разрешить client_id в сочетании с пользовательским агентом браузера, но не выпускать refresh_token и использовать в этом случае более короткое истечение срока действия access_token. (не уверен, что это будет по-прежнему технически соответствовать OIDC)

+0

Спасибо, это похоже на хорошее решение. Будут делать дополнительные исследования по этому аспекту. – user3319803

0

Библиотеки OAuth2, которые я видел, обычно позволяют настраивать, какие типы предоставления доступа доступны для данного клиента. Решение здесь заключалось бы в том, чтобы ограничить использование клиентом неявного (и запретить код авторизации один).

+0

Все еще думают об этом в концептуальной фазе, но хорошо знают, что библиотеки поддерживают его. Действительно, необходимо будет предоставить/аннулировать эти типы грантов для каждого клиента (пытался сказать это в моем последнем абзаце). Я ищу стратегии, чтобы сделать это как можно меньше людей. Если разработчик однажды создает настольное приложение с использованием authz-grant, я хочу каким-то образом обнаружить/заблокировать его от использования того же client_id, client_secret в потоке authz для своего отдельного веб-приложения (в котором это будет нарушение безопасности) – user3319803

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