我有几个问题。
使用授权代码流时,是否需要在客户端验证nonce?在常规OAuth提供程序实现中,从授权代码获取访问令牌的过程仅适用一次。从这一点来看,授权代码流似乎已经支持重放攻击而不使用nonce?
在Web应用程序中使用授权代码流有什么好处? ID Token是一种身份验证机制,而不是授权机制,我知道它用于验证哪个OpenID Provider正在验证哪个用户为哪个中继方。
但在授权代码流程中,
答案 0 :(得分:2)
我不是OpenID Connect的权威,但这是我的两分钱......
授权代码流程和随机数
使用授权代码流时,是否需要在客户端验证nonce?
规范说如果你在授权请求中发送一个nonce,那么你必须验证它(参见http://openid.net/specs/openid-connect-core-1_0.html#IDToken中的“nonce”)。但是,授权代码流不需要发送随机数,因此您可以将其完全取消。在授权代码流的情况下,我认为你是正确的,因为代码减轻了重放攻击 - 使nonce不必要。但是,由于可能正在使用需要nonce的隐式/混合流,因此id_token验证逻辑可能也是相同的,“如果在Authentication Request中发送了nonce值,则必须存在nonce声明并且值检查“
授权码流程和ID令牌
在Web应用程序中使用授权代码流有什么好处?
我认为授权代码流的好处是您可以将令牌保留在浏览器之外,并且可能只在服务器端保留令牌。
这是a helpful link about choosing the right flow for the right scenario