匿名用户的访问令牌 - JWT

时间:2015-07-02 12:22:36

标签: authentication laravel-5 authorization access-token jwt

我一直在研究切换到社区支持的授权系统,而不是我建立的授权系统。我犯了重建轮子的错误,而不是实施利用最佳实践的社区驱动系统。但是,我无法通过JWT而不是身份验证找到任何授权示例。

我对所有建议持开放态度。据我所知,JWT和OAuth要求客户拥有现有帐户,并进行身份验证以接收令牌。但是,我需要在我的应用程序中使用以下功能。

  • 匿名用户应获取访问令牌,并能够获取一些资源。我应该能够识别这些客户端客户端并为它们存储会话数据。
  • 访客用户应该能够登录,然后可能获得新令牌,或者更新他们的访问级别以请求受限资源并执行仅适用于成员的操作。

我将使用Laravel 5.1和AngularJS构建此项目。非常感谢所有建议。我真的可以在这方面使用一些方向,简单的文档链接就足够了。

2 个答案:

答案 0 :(得分:1)

我当然理解您描述的用例 - 但我认为匿名令牌实际上并没有增加任何安全性。这是因为完全匿名的用户将能够在不首先识别自己的情况下请求匿名令牌(否则它不会是匿名的)。因此 - 该令牌必须被假定为您的应用程序的任何和所有用户(包括那些有恶意的用户)

虽然我不熟悉 Laravel - 实现这种功能的一般方法可能是这样的:

方法

  1. 找到一个允许在登录前收集用户信息的会话库(我很确定大多数会话库都会促进这一点)
  2. 为访问应用程序的每个用户创建一个会话(在此您可以开始分析他们、存储有用信息等)
  3. authenticated 端点和 anonymous 端点之间创建划分,需要用户会话中存在有效的访问令牌才能检索/发送数据到 authenticated 端点
  4. 当用户“登录”时,您可以使用您选择的身份验证提供商执行 OAuth2.0/OIDC 流程,最终检索令牌。
  5. 将令牌存储在用户的会话中(实际上是“升级”他们的访问权限),以便他们下次尝试访问 authenticated 端点时拥有访问权限

一般注意事项

  • 确保为会话数据使用持久性存储(我通常会使用类似 Redis 的东西),以便可以在应用程序的实例之间共享会话数据)

答案 1 :(得分:0)

我认为您可以从随机的现有用户或自定义声明中生成匿名访问令牌

来自现有随机用户:

// grab some user
$user = User::first();

$token = JWTAuth::fromUser($user);

或来自自定义声明:

$customClaims = ['foo' => 'bar', 'baz' => 'bob'];
$payload = JWTFactory::make($customClaims);
$token = JWTAuth::encode($payload);

您可以从以下链接获取更多详细信息:

https://github.com/tymondesigns/jwt-auth/wiki/Creating-Tokens