2016-02-12 2 views
5

У меня есть API с помощью следующего метода:Secure сторонних API вызовы на мобильных приложениях

https://api.example.com/services/dosomething 

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

Я знаю, что предоставление каждого из трех мобильных приложений различного API Key и делаешь HTTP Basic Authentication с ним не является безопасным, так как ключ API будет небезопасным хранятся в устройстве любого человек может принять его и плохо использовать его.

Подход OAuth2 не работает, поскольку у меня есть информация только о моих трех клиентах, а не о их сотнях пользователей.

Каков наилучший подход для обеспечения вызовов моего API на мобильных устройствах?

ответ

5

В вашем случае ваш подход с OAuth2 хорош: мобильные приложения (клиенты) получают делегацию от владельцев ресурсов (ваших пользователей) для вызова защищенных ресурсов на сервере ресурсов (ваш API).

У вас есть только информация о ваших клиентах, потому что OAuth2 не предназначен для аутентификации ваших пользователей, а авторизации ваших клиентов. Клиенты идентифицируются идентификатором клиента. В вашем случае, и если вы хотите знать, какой клиент вызывает ваш сервер ресурсов, каждый клиент должен иметь выделенный идентификатор клиента. Вы также можете идентифицировать его, используя другую информацию, такую ​​как IP-адрес или пользовательский заголовок в запросах, которые он отправляет.

Если вы хотите узнать, кто ваши пользователи, вы должны использовать расширение OpenID Connect. Это расширение работает поверх сервера авторизации на основе OAuth2. Аутентификация пользователя выполняется сервером авторизации. Идентификатор ID выдается с информацией о пользователе. Клиент (или мобильное приложение) не должен получать или хранить учетные данные пользователя.

Существует excellent video where the both protocols are explained (особенно с 4:44 до 11:00).

+0

Спасибо! Вы сказали, что OAuth2 посвящен авторизации моих клиентов (мобильных приложений). Как работает эта проверка подлинности? Есть ли ключ API или имя пользователя/пароль для каждого приложения? Если да, то как мы можем сохранить эту информацию конфиденциальной? Мне не нужно знать, что это за пользователь, но мне нужно знать, какой клиент отправляет запрос. – Arturo

+0

Привет. Я обновил свой ответ, и я добавил подробности. Надеюсь, это поможет вам –