在 IdentityServer4 中如何存储和传输 nonce 和 state 参数?

Sim*_*ode 2 oauth-2.0 openid-connect identityserver4

我已经阅读了这里关于状态现时参数之间的区别以及据我了解状态参数由身份验证服务器(身份服务器)生成并由客户端用于防止 CSRF 攻击,而现时参数由客户端生成然后身份验证服务器将其包含在令牌中,客户端将使用它来检查令牌有效性。

我的第一个问题是:在使用隐式授权类型时,在 identityServer4 的情况下,上述流程是否正确?

我的第二个问题:nonce参数存储在用户代理(浏览器)的何处,客户端如何生成和传输它?

我的第三个问题:客户端如何交叉检查状态参数是否有效?

Kav*_*uwa 5

不,状态随机数都是由客户端生成的。同样,它们由客户端验证。

状态防止 CSRF 攻击。授权服务器将包含状态,以便可以验证来自客户端的原始请求的授权响应。类似的nonce是由客户端生成的。授权服务器只需将其包含在令牌中进行验证。

在使用隐式授权类型时,在 identityServer4 的情况下,上述流程是否正确?

identityServer4 必须支持在适当的响应中包含状态和随机数。我相信确实如此。

nonce 参数存储在用户代理(浏览器)的何处,客户端如何生成和传输它?

这将取决于客户端的实现。OIDC 协议提供了关于 nonce 实现指南

为 Web 服务器客户端实现此目的的一种方法是将加密随机值存储为 HttpOnly 会话 cookie,并使用该值的加密哈希作为 nonce 参数

客户端如何交叉检查状态参数是否有效?

当客户端收到授权响应时,它必须验证响应 URL 的查询参数(或片段)中 state 参数的存在。然后它必须将值与它生成的原始值进行比较。