Laravel 4 + Sentry 2 как веб-сервис

Мой вопрос: как мне использовать laravel 4 с sentry 2 для аутентификации пользователей, которые вызывают мой API? Каковы правильные способы сделать это?

Пример: пользователь в нативном приложении iOS вызывает мою веб-службу Laravel (возвращает ответ JSON), как laravel+sentry может аутентифицировать пользователя?

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


person ryan dy    schedule 15.05.2014    source источник


Ответы (2)


Если клиент может сохранять файлы cookie, вы просто входите в систему с помощью Sentry, и все должно работать. В противном случае после обычной аутентификации Sentry создайте и сохраните токен аутентификации в таблице пользователей:

$table->string('api_token',96)->nullable();

Затем используйте его во всех других вызовах:

{
    "token": "a358dafd256cb5b26a944eacc1c7428a97f6d1e079c3f1972696f1bea7fff099",
    "user": {
        "id": "3",
        "email": "[email protected]",
        "permissions": [],
        "activated": true,
        "activated_at": null,
        "last_login": "2014-03-08 11:17:48",
        "first_name": null,
        "last_name": null,
        "created_at": "2014-03-08 10:29:08",
        "updated_at": "2014-03-08 11:17:48",
        "api_token": "a358dafd256cb5b26a944eacc1c7428a97f6d1e079c3f1972696f1bea7fff099"
    }
}

Статья об этом: http://rjv.im/post/78940780589/api-token-authentication-with-laravel-and-sentry

person Antonio Carlos Ribeiro    schedule 15.05.2014
comment
Большое спасибо за информацию. Я также видел эту ссылку, но мне было интересно, хороший ли это подход, потому что он указал, что это грязный пример. Цитата из ссылки: Я предложу пример (грязный).... А как вы считаете, хорош ли его подход? Тай снова :) - person ryan dy; 15.05.2014
comment
Дополнительный вопрос, означает ли это, что для каждого запроса пользователя моя веб-служба laravel должна проверять таблицу пользователей, если она имеет правильный api_token? - person ryan dy; 15.05.2014
comment
Что ж, если клиент может сохранить файл cookie Laravel живым, вам просто нужно войти в систему с помощью sentry, и он должен работать как обычно, в противном случае вам придется реализовать это самостоятельно, imo. - person Antonio Carlos Ribeiro; 15.05.2014
comment
Вы можете просто кэшировать этот токен API вместе с идентификатором пользователя, и если вам когда-нибудь снова понадобится пользователь, вы сделаете запрос, чтобы получить его. - person Antonio Carlos Ribeiro; 15.05.2014
comment
Большое спасибо за подробное объяснение. Я действительно оценил это! - person ryan dy; 17.05.2014

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

Но, я расскажу вам свои исследования на эту тему. Я искал реализацию токена API с помощью Laravel. Один, который я смог найти, принадлежит Терри Эпплби, и его реализация представляет собой пакет композитора с именем tappleby/laravel-auth-token. Я реализовал гораздо более простую версию пакета с помощью Sentry 2 по адресу http://rjv.im/post/78940780589/api-token-authentication-with-laravel-and-sentry.

Я назвал его грязным, потому что не особо задумывался о безопасности, истечении срока действия токенов и т. д., но, чтобы ответить на ваш вопрос, приведенная выше версия работает и небезопасна, если вы не находитесь в среде https.

Чтобы помочь вам больше, я предлагаю github.com/kippt/api-documentation. Это документация по API для приложения kippt.com. Я выбрал этот, потому что он действительно прост и может стать отправной точкой, если вы новичок в разработке API. Посмотрите, как они поддерживают различные виды аутентификации. Подводя итог тому, что поддерживает Kippt: сеанс браузера (я предполагаю, что iOS поддерживает файлы cookie), HTTP Basic Auth (передача имени пользователя и пароля каждый раз в заголовке) и токен (передача токена в заголовке каждого запроса). При реализации токена Kippt он просто возвращает токен клиенту после успешной аутентификации, и этот токен можно сохранить и использовать. Этот токен никогда не меняется. В своем блоге я создаю новый токен каждый раз, когда пользователь входит в систему.

Надеюсь, я смог помочь.

person rjvim    schedule 16.05.2014
comment
Спасибо также за подробное объяснение. Я зайду к вам на страницу, если у меня будут еще вопросы :) - person ryan dy; 22.05.2014