【问题标题】:Access token for anonymous users - JWT匿名用户的访问令牌 - JWT
【发布时间】:2015-09-19 23:37:17
【问题描述】:

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

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

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

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

【问题讨论】:

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

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


【解决方案1】:

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

虽然我不熟悉 Laravel - 实现此类功能的一般方法可能类似于:

方法

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

一般说明

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

【讨论】:

    【解决方案2】:

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

    来自现有随机用户:

    // 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

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 2019-12-08
      • 2017-12-29
      • 1970-01-01
      • 2017-09-01
      • 2021-11-16
      • 1970-01-01
      • 2019-09-19
      • 2021-08-24
      相关资源
      最近更新 更多