Authentication 匿名用户访问令牌-JWT

Authentication 匿名用户访问令牌-JWT,authentication,laravel-5,authorization,access-token,jwt,Authentication,Laravel 5,Authorization,Access Token,Jwt,我一直在研究切换到社区支持的授权系统,而不是我构建的授权系统。我犯了一个错误,重建了轮子,而不是实施一个利用最佳实践的社区驱动系统。但是,我找不到任何JWT而不是身份验证的授权示例 我愿意接受所有建议。据我所知,JWT和OAuth要求客户端拥有一个现有帐户,并进行身份验证以接收令牌。但是,我的应用程序中需要以下功能 匿名用户应该获得一个访问令牌,并且能够获取一些资源。我应该能够识别这些客户机并为它们存储会话数据 来宾用户应该能够登录,然后可能获得一个新的令牌,或者更新他们的访问级别以请求受限的

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

我愿意接受所有建议。据我所知,JWT和OAuth要求客户端拥有一个现有帐户,并进行身份验证以接收令牌。但是,我的应用程序中需要以下功能

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

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

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

来自现有随机用户:

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

$token = JWTAuth::fromUser($user);
或来自海关索赔:

$customClaims = ['foo' => 'bar', 'baz' => 'bob'];
$payload = JWTFactory::make($customClaims);
$token = JWTAuth::encode($payload);
您可以从以下链接获取更多详细信息:


我当然理解您描述的用例,但我认为匿名令牌实际上并没有增加任何安全性。这是因为完全匿名的用户可以请求匿名令牌,而无需首先标识自己(否则它就不会是匿名的)。因此-必须假定此令牌由应用程序的任何和所有用户(包括具有恶意意图的用户)拥有

虽然我不熟悉Laravel,但实现此类功能的一般方法可能是:

方法
  • 找到一个允许在登录之前收集用户信息的会话库(我相当肯定大多数会话库都会促进这一点)
  • 为每个访问应用程序的用户创建一个会话(在这个会话中,您可以开始分析他们,存储有用的信息等)
  • authenticated
    端点和
    anonymous
    端点之间创建一个分界线,要求用户会话中存在有效的访问令牌来检索/发送数据给那些
    authenticated
  • 当用户“登录”时,您可以使用您选择的身份验证提供商执行OAuth2.0/OIDC流,最终检索令牌
  • 将令牌存储在用户会话中(实际上是“升级”他们的访问权限),以便当他们下次尝试访问
    已验证的
    端点时,他们可以访问
  • 一般说明
    • 确保对会话数据使用持久存储(我通常会使用Redis之类的东西),以便在应用程序实例之间共享会话数据)

    我有同样的问题。我怎样才能发出一个有效的令牌来从我的API端点获取某些数据,但前提是它们拥有一个有效的匿名令牌。我有同样的问题。您如何为匿名用户和非匿名用户授权多租户应用程序,JWT…此处相同。您至少需要保护您的登录API!看见我正在与所谓的“社区支持授权系统”斗争。IMHO它不存在…不能为用户“匿名”生成令牌吗?JWT所做的只是验证传入的文档是否正确签名。因此,只要以“匿名”用户身份登录即可。