2016-11-28 3 views
1

Этот вопрос связан с регистрацией на основе OAuth в родном мобильном приложении. В соответствии с потоком авторизации типа авторизации пользователь вводит идентификатор пользователя, пароль на странице входа и в ответ, код авторизации получается в URL-адресе (поскольку его URL-адрес, шифрование на основе https тоже не работает).Проблема безопасности, связанная с потоком OAuth

Это означает, что авторизационный код доступен в прокси, и любой может использовать его, при условии, что у них есть секретный клиент. Клиентский секрет не может быть сохранен в мобильном приложении, так как мобильное приложение также не считается защищенным. Подход, который я имел в виду, чтобы обойти безопасность секретности клиента, заключался в предоставлении конечной точки на стороне сервера, где мобильный клиент может звонить с помощью Идентификатор клиента, Код авторизации и URL-адрес перенаправления. Конечная точка обогатит секрет клиента, а затем вызовет фактическую конечную точку маркера, чтобы получить accesstoken. Accesstoken обеспечен, так как все сообщение превышает HTTPS.

Теперь проблема заключается в том, что код авторизации в URL-адресе небезопасен и уязвим. Или я переусердствую о безопасности. Это основной вопрос, и если это действительно проблема безопасности, каково смягчение последствий?

Один из вариантов, который я мог бы подумать и из одного из старых потоков stackoverflow, состоял в том, чтобы защитить конечную точку маркера, которая даст токен доступа с серверной стороны. Любое предложение о том, как это сделать? - Если его сертификаты, то сертификат будет упакован в мобильное приложение, что сделает его еще небезопасным)

ответ

2

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

a. TLS между клиентом и сервером authroization. Когда полная аутентификация выполняется после нескольких переадресаций внутри поставщика авторизации, поставщик авторизации установит заголовок местоположения в качестве URL-адреса перенаправления вместе с кодом авторизации в параметре запроса в его заголовке местоположения. Поскольку код авторизации находится в заголовке местоположения, а заголовки ответов по-прежнему защищены TLS, подслушивание не будет выставлять код авторизации.

b. Если клиент является мобильным приложением - перенаправление uri должно указывать на пользовательскую схему URI, которая будет указывать на самое мобильное приложение. Поэтому, когда браузер выполняет перенаправление на основе заголовка местоположения, браузер вызывает мобильное приложение. Вызов не выходит из устройства, и, следовательно, код авторизации не распространяется на внешний мир.

c. Если клиент является веб-приложением - перенаправление uri будет выполняться через браузер, а код авторизации будет отображаться в прокси-журналах (после выгрузки https), а в кеше браузера или при перенаправлении он будет восприимчив к утечка кодов. Защита кода авторизации осуществляется двумя способами: a. Код авторизации может быть задан со временем жизни, который может быть небольшим. б. Код авторизации можно использовать только один раз. Поэтому, если фактический клиент уже использовал его, никто не может повторно использовать код аутентификации, чтобы снова получить токен доступа.

d. Основываясь на точке, упомянутой Крисом в комментариях ниже, спецификация определяет подход к защите неправильного использования кода авторизации. Если код используется более одного раза, сервер авторизации может аннулировать все токены доступа, созданные с помощью кода авторизации.

+0

d. Из [спецификации] (https://tools.ietf.org/html/rfc6749#section-3.1.2.1): конечной точке перенаправления СЛЕДУЕТ потребоваться использование TLS, как описано в Разделе 1.6, когда запрошенный тип ответа является «кодом», или «токен», или когда запрос перенаправления приведет к передаче конфиденциальных учетных данных через открытую сеть. –

+0

@ Kris. Согласен, что конечная точка перенаправления использует TLS, но код авторизации является частью параметра HTTP-запроса, который не может быть защищен TLS. – Vaya

+0

Это зависит от того, что вы подразумеваете под «защитой». Конечно, он может быть зарегистрирован вашим веб-сервером и, возможно, прокси-сервером, если это завершает TLS. Но прослушиватель сети не видит этого. –

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