Azure AD B2C Clock Skew默认5分钟的原因及调整建议咨询
Azure AD B2C Clock Skew 相关问题解答
背景说明
当前Azure AD B2C服务中,Clock Skew默认设置为300000毫秒(即5分钟),我认为该时长过长,需要缩短。我正在处理Graph API会话撤销相关工作,修改自定义策略时注意到这个默认设置的影响。
相关自定义策略代码
<ClaimsTransformation Id="AssertRefreshTokenIssuedLaterThanValidFromDate" TransformationMethod="AssertDateTimeIsGreaterThan"> <InputClaims> <InputClaim ClaimTypeReferenceId="refreshTokenIssuedOnDateTime" TransformationClaimType="leftOperand" /> <InputClaim ClaimTypeReferenceId="refreshTokensValidFromDateTime" TransformationClaimType="rightOperand" /> </InputClaims> <InputParameters> <InputParameter Id="AssertIfEqualTo" DataType="boolean" Value="false" /> <InputParameter Id="AssertIfRightOperandIsNotPresent" DataType="boolean" Value="true" /> <InputParameter Id="TreatAsEqualIfWithinMillseconds" DataType="int" Value="300000" /> </InputParameters> </ClaimsTransformation>
问题场景示例
Clock Skew = 300000毫秒(5分钟)。假设refreshTokenIssuedOnDateTime标记为00:00:00,refreshTokensValidFromDateTime标记为00:04:59,理论上该刷新令牌应无效,但由于两者时间差未超过Clock Skew限制(4分59秒<5分钟),令牌仍会被判定为有效,用户可继续用它获取新访问令牌。
疑问解答
1. 微软将Clock Skew默认设为5分钟的原因是什么?
核心是兼容分布式系统的时间不一致问题。Azure AD B2C作为云服务,用户端、身份提供者、业务系统等不同节点的服务器时钟不可能完全同步,存在一定误差。5分钟的默认值是微软经过大量场景验证后给出的折中方案:既足以覆盖绝大多数场景下的时钟偏差(比如客户端设备时钟不准、服务器间同步延迟等),又不会过度放宽安全限制。同时,这个值也符合行业常见的时钟偏差容忍标准,避免因微小时间差导致合法令牌被误判无效,影响用户体验。
2. 若要缩短,合理值是多少?
没有绝对统一的标准,需结合业务场景和安全要求权衡:
- 如果系统内部时钟同步做得非常好(比如全量使用NTP精准同步,客户端设备也强制时钟校准),可设置为1-2分钟(60000-120000毫秒),既保留少量容错空间,又提升安全性。
- 若业务对会话撤销的实时性要求极高,且能接受极小概率的合法令牌误拒风险,可尝试30秒(30000毫秒)。
- 建议先从小幅度缩短开始测试,观察是否出现用户登录/令牌刷新失败的异常情况,再逐步调整到合适值。
3. 设为0是否有影响?
设为0意味着完全不允许时钟偏差,会带来以下影响:
- 合法令牌被误判无效:只要客户端或服务器时钟存在哪怕1毫秒的偏差,就会导致令牌验证失败,用户无法正常登录或刷新令牌,严重影响用户体验。
- 增加运维复杂度:出现令牌验证失败时,需优先排查时钟同步问题,而非业务逻辑错误,提升排查成本。
- 仅在极端安全要求且所有节点时钟绝对同步的场景下才建议考虑,但这种场景在实际生产环境中几乎不存在,不推荐设置为0。
内容的提问来源于stack exchange,提问作者Phúc Trần
相关产品推荐
相关产品推荐

