Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 如何在域之间传递JWT会话令牌?_Security_Jwt - Fatal编程技术网

Security 如何在域之间传递JWT会话令牌?

Security 如何在域之间传递JWT会话令牌?,security,jwt,Security,Jwt,我希望在我的应用程序中支持此方案: 用户访问标准应用程序URL 用户登录并从服务器接收JWT令牌,以维护登录会话 应用程序确定用户的帐户已分配自定义域 应用程序重定向到自定义域 用户保持登录状态,无需重新登录 第五步是唯一的困难。有人对如何安全地实现这一点有什么建议吗?我看到过将JWT作为重定向中的参数传递的建议,但这对我来说似乎非常不安全 我在考虑一个选择,那可能至少更安全。。。服务器可以创建一次性“传输”令牌。这将在重定向URL中传递,新URL处的(相同)应用程序可以将其传递给服务器以获取J

我希望在我的应用程序中支持此方案:

  • 用户访问标准应用程序URL
  • 用户登录并从服务器接收JWT令牌,以维护登录会话
  • 应用程序确定用户的帐户已分配自定义域
  • 应用程序重定向到自定义域
  • 用户保持登录状态,无需重新登录
  • 第五步是唯一的困难。有人对如何安全地实现这一点有什么建议吗?我看到过将JWT作为重定向中的参数传递的建议,但这对我来说似乎非常不安全

    我在考虑一个选择,那可能至少更安全。。。服务器可以创建一次性“传输”令牌。这将在重定向URL中传递,新URL处的(相同)应用程序可以将其传递给服务器以获取JWT。对此有何想法


    谢谢。

    由于多种原因,您不应该在url中传递实际身份验证令牌(jwt)。敏感数据不应出现在URL中

    传递一次性令牌以交换身份验证令牌在某种程度上更安全,但您可以将其设置为纯无状态的或一次性的,但不能两者都设置,因为您必须记住使用过的令牌。没关系,只是考虑一下。此外,如果您可以在请求正文或标题中传递它,那么您应该(例如,post请求将在正文中而不是url中传递)

    但是,如果您正在这样做,那么您就是在重新发明单点登录。您所需要的已经有多种不同的形式,最显著的是OIDC和SAML。在类似于最佳实践的体系结构中,您将拥有一个登录端点,该端点将充当身份验证提供程序(例如OIDC提供程序)。这将发行身份验证令牌,消费者(OIDC术语中的依赖方,基本上是您的应用程序)可以直接使用这些令牌,或者根据从身份提供商收到的令牌进行自己的会话

    在授权代码流的情况下,它看起来像

  • 用户访问app1,但未登录(没有有效令牌或会话)
  • 用户被重定向到登录服务器,在那里他登录,并被重定向回带有身份验证代码的app1
  • 后台的app1可以将代码交换为令牌,您可以在后端使用这些令牌来模拟用户,因此每个后端组件都可以确定用户是谁,并且在此步骤中,app1还可以根据需要为用户创建一个普通的旧会话
  • 在后续请求中,用户将已经拥有会话(或id令牌)
  • 当用户访问app2时,根据您选择的确切流程,客户端可能已经有一个id令牌,可以发送到app2,或者将其重定向到登录服务器,但用户已经在那里登录,因此从用户的角度来看,这一切都是透明的,app2可以正常工作
  • 上述方法的一个主要好处是,它是一种标准方法,有经过良好测试的流和现成组件,您可以使用它们,并且可以合理地保证它们的安全性。另一个好处是,所有组件都是可重放的,您可以相对轻松地切换到另一个身份提供商(您可以从许多选项中进行选择,包括开源选项或非常便宜的托管选项),并且依赖方(应用程序)也将很容易且标准化