0

我的问题是如何使用 laravel 4 和哨兵 2 来验证调用我的 API 的用户?这样做的正确方法是什么?

示例:原生 iOS 应用中的用户调用我的 Laravel Web 服务(返回 JSON 响应),laravel+sentry 如何对用户进行身份验证?

如果您需要更多信息,请提前致谢并发表评论。

4

2 回答 2

3

就像 Antonio 提到的,如果客户端能够持久保存 cookie,那么您应该设置好。

但是,我会告诉你我对这个主题的研究。我用 Laravel 寻找 API 令牌实现。我能找到的一个是 Terry Appleby,他的实现是一个名为 tappleby/laravel-auth-token 的作曲家包。我在http://rjv.im/post/78940780589/api-token-authentication-with-laravel-and-sentry使用 Sentry 2 实现了一个更简单的包版本。

我称它为脏版本是因为我没有考虑太多关于安全性、令牌到期等问题,但要回答您的问题,上述版本确实有效,除非您处于 https 环境中,否则它并不安全。

为了帮助你更多,我建议 github.com/kippt/api-documentation。它是名为 kippt.com 的应用程序的 API 文档。我之所以选择这个,是因为它非常简单,如果您是开发 API 的新手,它可以作为一个起点。了解它们如何支持不同类型的身份验证。总结一下 Kippt 支持的内容:浏览器会话(我猜 iOS 确实支持 cookie)、HTTP 基本身份验证(每次在标头中传递用户名和密码)和令牌(在每个请求的标头中传递一个令牌)。在 Kippt 的 Token 实现中,它只是在成功验证后向客户端返回一个令牌,并且可以保存和使用该令牌。该令牌永远不会改变。在我的博客文章中,每次用户登录时我都会创建一个新令牌。

希望我能帮上忙。

于 2014-05-16T03:27:26.923 回答
2

如果客户端能够持久保存 cookie,您只需使用 Sentry 登录,它应该可以工作。否则,在普通的 Sentry 身份验证之后,创建一个身份验证令牌并将其存储在您的用户表中:

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

然后在所有其他调用中使用它:

{
    "token": "a358dafd256cb5b26a944eacc1c7428a97f6d1e079c3f1972696f1bea7fff099",
    "user": {
        "id": "3",
        "email": "joe@doe.com",
        "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

于 2014-05-15T15:18:55.930 回答