2015-07-15 4 views
0

У меня есть SDK для Android/iOS, который взаимодействует с моим бэкендом через App Engine и Cloud Endpoints. Я хочу ограничить доступ к моему серверу разработчикам, которые создали учетную запись и сгенерировали «ключ API» (в кавычках, потому что я не уверен, какая форма требуется) для взаимодействия с моим бэкэнд. Я также хочу отслеживать, какой разработчик/приложение получил запрос, поэтому я хочу уникальный ключ для каждого разработчика.Создание ключей API для брандмауэра App Engine

Облачные конечные точки используют SSL, поэтому я могу просто сгенерировать открытый и закрытый ключ API как криптографически безопасное случайное число и включить их в тело моего запроса, чтобы быть авторизованым моим бэкэнд, который хранит эти ключи где-то?

Опять же, мне неинтересно защищать запрос при его переходе с клиента на мой сервер, а скорее разрешать «пользователю» (в данном случае разработчику). Поблагодарю любые отзывы/идеи/лучшие практики для этого сценария.

-

Edit: не уверен, что если код будет реально помочь, но вот урезанная версия моего API.

public class MyApi { 

    public MyApi() { 

    } 

    public CEDataTransformResponse transformData(CEDataTransformRequest request) throws UnauthorizedException { 

    CERequestHeader header = request.getHeader(); 
    if (header == null) { 
     throw new UnauthorizedException("Missing header."); 
    } 
    authorizeToken(header.getToken()); 

    CEDataTransformResponse out = processRequestBody(request.getBody()); 

    return out; 
    } 

    private void authorizeToken(CEApiToken token) throws UnauthorizedException { 
    // Current way 
    if (!token.getToken().equals(Constants.TOKEN)) { 
     throw new UnauthorizedException("Unauthorized"); 
    } 

    // Future way? 
    String apiKey = token.getApiKey(); String apiSecret = token.getApiSecret(); 
    if !((mDatastore.containsKey(apiKey)) && (mDatastore.getValue(apiKey) == apiSecret)) { 
     throw new UnauthorizedException("Unauthorized"); 
    } 
    } 
} 

В «будущего пути», представьте mDatastore некоторые обертки вокруг магазина ключ-значение. Я игнорирую любое хеширование, которое я бы сделал.

Я изучил создание идентификаторов клиентов в консоли разработчиков Cloud Platform, но это слишком ручно; это должно произойти программно, когда новый разработчик подписывает/загружает мой sdk/запрашивает ключ.

ответ

0

Хорошо, несколько пунктов здесь.

  1. При использовании SO, вы должны отправить код. Вопросы должны принимать форму конкретных вопросов программирования и 9 раз из 10, что означает отправку кода.

  2. Независимо от того, вам нужно показать, что вы сделали, какие исследования вы провели, и какова ваша текущая ошибка/дорожный блок. Помните об этом, отправляя вопросы, как таковые, обновляйте свой текущий вопрос.

  3. Что касается вашего вопроса, ваш «ключ API» на самом деле просто «пользователь». Создайте систему входа и авторизуйтесь с помощью OAUTH. Вы можете отслеживать пользователя и предоставлять им любые учетные данные. Кроме того, OAUTH должен обладать дополнительным преимуществом защиты данных во время транзита.

+0

Добавлен код выше, но не уверен, что он сделает что-нибудь более четкое. Как я уже говорил выше, я просматривал идентификаторы клиентов через консоль разработчика, но это не работает для меня. Я также посмотрел на oAuth, хотя я думаю, что это не обязательно, потому что у меня будет система входа в систему, поэтому кажется, что избыточно генерировать токен доступа при входе в систему, а затем использовать этот токен, чтобы попасть в бэкэнд, когда я могу просто авторизовать непосредственно на некоторых входах на бэкэнд, как я предложил выше. – thegeebe

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