我想在我的应用程序中支持这种情况:
第5步是唯一的困难。有人对如何安全地实现这一目标有任何建议吗?我已经看到了将 JWT 作为重定向中的参数传递的建议,但这对我来说似乎非常不安全。
我正在考虑一种选择,这可能至少更安全......服务器可以创建一次性“转移”令牌。这将在重定向 URL 中传递,新 URL 上的(同一)应用程序可以将其传递到服务器以获取 JWT。对此有何想法?
谢谢。
Gab*_*yel 10
出于多种原因,您不应在 url 中传递实际的身份验证令牌 (jwt)。敏感数据永远不应出现在 URL 中。
传递一次性令牌来交换身份验证令牌在某种程度上更安全,但是您可以将其设置为纯粹无状态或一次性,但不能同时设置两者,因为您必须记住使用过的令牌。没关系,只是需要考虑的事情。另外,如果您可以将其传递到请求正文或标头中,则应该这样做(例如,post 请求会将其放在正文中而不是 url 中)。
然而,如果您这样做,您就是在重新发明单点登录。您所需要的已经以多种不同的形式提供,最引人注目的是 OIDC 和 SAML。在更接近最佳实践的架构中,您将拥有一个充当身份验证提供程序(例如 OIDC 提供程序)的登录端点。这将颁发身份验证令牌,消费者(OIDC 术语中的依赖方,这些基本上是您的应用程序)可以直接使用或根据从身份提供商收到的令牌创建自己的会话。
在授权代码流程的情况下,它看起来像
上述的一个主要好处是它是一种标准方法,有经过充分测试的流程和现成的组件可供您使用,并且您可以合理地保证它们的安全性。另一个好处是所有组件都是可替换的,您可以相对轻松地切换到另一个身份提供商(您可以从许多身份提供商中进行选择,包括开源选项或非常便宜的托管选项),并且依赖方(应用程序)也将很容易且标准制作。