php symfony 2中基于令牌的身份验证

php symfony 2中基于令牌的身份验证,php,api,symfony,security,authentication,Php,Api,Symfony,Security,Authentication,我正在symfony 2中构建rest api和web应用程序。我的RESTAPI将由移动应用程序使用,它不是公共api。我使用基于令牌的身份验证,令牌存储在数据库中 我的表架构如下所示: |---users----| |---identities---------| |pk id | |pk id | | email | | token | | password | |

我正在symfony 2中构建rest api和web应用程序。我的RESTAPI将由移动应用程序使用,它不是公共api。我使用基于令牌的身份验证,令牌存储在数据库中

我的表架构如下所示:

|---users----|     |---identities---------|
|pk id       |     |pk  id                |
|   email    |     |    token             |
|   password |     |    device            |
|------------|     |fk  user_id           |
                   |    token_createdDate |
                   |----------------------|
我的身份验证过程包括以下步骤:

  • android应用程序中有一个带有用户名和密码的登录表单。应用程序将登录请求(POST)以及用户代理请求标头中的设备名称发送到我的php api,url如下所示:/api/v1/login。如果身份验证成功,我将返回一个带有令牌的json响应。json响应示例如下所示:
  • {
    “令牌”:“1325asd3434asfFF34d65”,
    “用户”:{
    “id”:32,
    “电子邮件”:sample@eg.com",
    “角色”:“客户”
    }
    }
    
  • 现在,android应用程序通过在请求头中包含此令牌来访问安全的api资源。我的受保护资源url如下:/api/v1/hello。PHPAPI读取令牌和用户代理请求头,然后验证它是否存在于我的表“标识”中。用户代理请求标头映射到我的表“标识”中的设备列
  • rest api的身份验证系统存在哪些漏洞

    更新:
    我遇到了FosOAuthBundle,但我不知道它是否可以用于我的场景。我的api不会公开。我的android应用程序将提供带有登录和密码表单的登录界面。是否可以使用FOSOAuthBundle执行此操作?

    您是为会话使用一个令牌还是在每个请求中更改它?我正处于设计阶段,因此我愿意接受任何必要的更改。目前,我正在考虑在一段时间后(比如说2个月)将代币到期。我的android应用程序在初始身份验证时收到的令牌将由我的应用程序保存。然后我的应用程序使用此令牌登录,直到令牌过期。@pradip在您的系统中使用https可能是一个很好的方法。我现在也在做同样的事情。那你最后是怎么处理的?特别是您是如何实现令牌部分的?我使用的是相同的结构。我还使用jwt作为代币。使用jwt,您不必将其存储在数据库中。我将其存储在数据库中以维护受损令牌列表,该列表允许我撤销该令牌。