Oauth 2.0 如果OpenID Connect id_令牌和access_令牌是由web服务器获取的,是否需要验证它们?

Oauth 2.0 如果OpenID Connect id_令牌和access_令牌是由web服务器获取的,是否需要验证它们?,oauth-2.0,single-sign-on,openid-connect,websecurity,Oauth 2.0,Single Sign On,Openid Connect,Websecurity,我想知道,在OpenID Connect身份验证代码流中,是否仍然需要验证访问令牌和id\u令牌,因为它们是通过我的web服务器而不是浏览器获得的(即使用后通道而不是前通道) 通过“授权代码流”,我指的是浏览器仅从授权服务器接收“授权代码”(即无访问令牌、无id令牌)并将授权代码发送到我的web服务器的流。因此,我的web服务器可以直接与授权服务器通信,提供身份验证代码,并将其交换为access_令牌和id_令牌。看起来我可以简单地解码access_令牌和id_令牌来获得我想要的信息(主要是用户

我想知道,在OpenID Connect身份验证代码流中,是否仍然需要验证访问令牌和id\u令牌,因为它们是通过我的web服务器而不是浏览器获得的(即使用后通道而不是前通道)

通过“授权代码流”,我指的是浏览器仅从授权服务器接收“授权代码”(即无访问令牌、无id令牌)并将授权代码发送到我的web服务器的流。因此,我的web服务器可以直接与授权服务器通信,提供身份验证代码,并将其交换为access_令牌和id_令牌。看起来我可以简单地解码access_令牌和id_令牌来获得我想要的信息(主要是用户id等)

我对验证访问令牌的必要性的理解是,由于访问令牌未加密,如果通过不安全的通道传输,则我的web服务器可能会获得伪造的令牌。验证令牌基本上是验证令牌是否未被修改


但是,如果访问令牌没有在任何不安全的信道上传输呢?在身份验证代码流中,web服务器直接从身份验证服务器检索access_令牌,并且该令牌永远不会发送到浏览器。我还需要验证令牌吗?如果我跳过这些流中的验证,那么潜在的风险是什么?

您应该始终验证令牌,并对令牌应用众所周知的验证模式。因为否则,您将为各种漏洞打开您的体系结构。例如,如果黑客正在拦截您与令牌服务的“私人”通信,那么您就有了中间人问题

此外,大多数库会自动为您执行验证,因此验证不是问题

当您开发身份识别系统时,您应该遵循最佳实践和各种当前最佳实践,因为这是系统用户对您的期望

作为客户机,您可以使用HTTPS从IdentityServer获取公钥,这样您就知道从正确的服务器获得了什么。要添加额外的安全层,还可以使用客户端HTTPS证书,以便IdentityServer仅向使用证书进行身份验证的客户端颁发令牌

在这种情况下,中间人是不可能的。然而,在后端的数据中心中,您有时并不在内部的任何地方都使用HTTPS。通常TLS在代理中终止,您可以阅读更多关于这方面的内容

当您收到一个ID令牌时,通常会从该令牌创建用户会话。是的,由于令牌是通过更安全的后台通道发送的,因此您可以非常安全地使用它。但是今天仍然有许多攻击发生在内部,为了根据所有最佳实践做好工作,您应该验证它们,包括签名和令牌内的声明(过期、发行人、受众…)

对于访问令牌,接收它的API必须根据所有最佳实践对其进行验证,因为任何人都可以向它发送带有令牌的请求

此外,学习也很有趣:-)


ps,这是一个很好的起点

让我特别困惑的是,如果存在SSL strip/man-in-the-middle攻击,我如何能够自信地验证我的令牌?为了验证令牌,我需要获取服务器的公钥,该公钥必须通过另一个get请求获取。如果有人在中间,他也可以劫持这个沟通,并给我任何伪造的钥匙,他用来伪造令牌。谢谢。顺便说一句,不管怎样,你的回答都很有价值,我会接受的。我无法理解的是——如果使用HTTPS从身份验证服务器获取公钥足以使公钥被认为是可信的,那么为什么同样的方式对令牌来说不够好呢?访问令牌和id令牌都是使用HTTPS直接从身份验证服务器检索的。如果我可以信任公钥,我也应该信任这些令牌?更新了我的答案,这是如何让您接受的,ps,大多数库为您进行验证,所以我想知道您为什么不喜欢验证它们并确保安全?正如您所说,我将按照约定验证它们,但我确实想知道幕后发生了什么,而不是盲目地遵循惯例。确实有一些库声称可以为我处理所有的复杂性,但我对这些库的健壮性/普遍适用性有点怀疑,也就是说,它们是否都以相同的方式执行相同的验证集?如果是这样,它们必须是可互换的?那么我应该使用哪一个呢?这里有经过认证的库,根据您使用的平台,请选择主动维护的库和具有开放源代码的库。我同意您应该查看这些包并了解它们是如何工作的,因为库确实存在bug。看到和