OpenID Connect和服务器端授权代码流程

时间:2016-11-19 07:17:10

标签: oauth-2.0 openid-connect

我有几个问题。

授权码流程和随机数

使用授权代码流时,是否需要在客户端验证nonce?在常规OAuth提供程序实现中,从授权代码获取访问令牌的过程仅适用一次。从这一点来看,授权代码流似乎已经支持重放攻击而不使用nonce?

授权码流程和ID令牌

在Web应用程序中使用授权代码流有什么好处? ID Token是一种身份验证机制,而不是授权机制,我知道它用于验证哪个OpenID Provider正在验证哪个用户为哪个中继方。

但在授权代码流程中,

  • OAuth 2.0需要使用HTTPS。由此,如果正确实施SSL证书验证,它将是有效的OpenID提供商证明。
  • 在常规OAuth提供程序实现中,从授权代码获取访问令牌时,下面将验证授权代码,客户端ID和密钥的组合。由此,它将证明正在从正确的OAuth客户端执行访问令牌获取过程。
  • 通过指定state参数来创建授权请求并在获取访问令牌时验证它,它将证明是从正确的用户获取访问令牌。

1 个答案:

答案 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