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

OpenID Connect and Server Side Authorization Code Flow

我有几个问题。

授权码流和随机数

使用Authorization Code Flow时是否需要在客户端验证nonce?在一般的 OAuth Provider 实现中,从授权代码中获取访问令牌的过程只进行一次。由此看来,Authorization Code Flow似乎已经支持不使用nonce的重放攻击了?

授权代码流和 ID 令牌

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

但是在授权代码流程中,

我不是 OpenID Connect 的权威,但这是我的两分钱...

Authorization Code Flow and nonce

Do I need to verify the nonce on the client side when using Authorization Code Flow?

规范说,如果您在授权请求中发送随机数,则您必须对其进行验证(参见 http://openid.net/specs/openid-connect-core-1_0.html#IDToken 中的“随机数”)。但是,授权代码流不需要发送随机数,因此您可以完全忽略它。在授权代码流的情况下,我认为你是对的,因为代码减轻了重放攻击——使随机数变得不必要。但是,由于可以在需要 nonce 的地方使用 implicit/hybrid 流,因此 id_token 验证逻辑可能与“如果在身份验证请求中发送了 nonce 值,则 nonce声明必须存在并检查其值

Authorization Code Flow and ID Token

What are the benefits of using Authorization Code Flow in web applications?

我认为授权代码流的好处是您可以将令牌保留在浏览器之外,并且很可能只将令牌保留在服务器端。

这里是a helpful link about choosing the right flow for the right scenario