我已阅读Here关于 state 和 nonce 参数之间的差异以及据我了解生成了 state 参数的信息由 Authentication 服务器(身份服务器)提供,并由客户端用于阻止CSRF攻击,而 nonce 参数由客户端生成,然后Authentication服务器会将其包含在令牌,客户端将使用它来检查令牌的有效性。
我的第一个问题是:在使用隐式授予类型时,对于IdentityServer4,上述流程是否正确?
我的第二个问题: nonce 参数存储在用户代理(浏览器)上的什么位置,客户端如何生成和传输它?
我的第三个问题:客户如何交叉检查 state 参数是否有效?
答案 0 :(得分:1)
不,状态和立即均由客户端生成。同样,它们也由客户验证。
状态可阻止CSRF攻击。授权服务器将包含状态,以便可以验证来自客户端的原始请求的授权响应。类似地,立即由客户端生成。授权服务器只需将其包含在令牌中即可进行验证。
在使用隐式授予类型时,对于IdentityServer4,上述流程是否正确?
identityServer4必须支持在适当的响应中包括状态和随机数。我相信是的。
随机数参数存储在用户代理(浏览器)上的什么位置,客户端如何生成和传输它?
这将取决于客户端的实现。 OIDC协议提供了guide on nonce implementation
为Web服务器客户端实现此目的的一种方法是将加密的随机值存储为HttpOnly会话cookie,并使用该值的加密哈希作为随机数参数
客户端如何交叉检查状态参数是否有效?
客户端收到授权响应时,必须验证响应URL的查询参数(或片段)中状态参数的正确性。然后,它必须将值与其生成的原始值进行比较。