可以写 OidC Bearer 令牌来记录吗?

信息安全 日志记录 开放式连接 oauth2 asp.net 核心
2021-08-15 08:38:14

在开发过程中,我们在错误日志中添加了 http 请求的详细信息,包括标头,以便更好地了解错误调查。我们的架构师指出我们不应该将敏感信息放在日志中。我的问题是,考虑到访问令牌是短暂的对象,我们是否应该将不记名令牌视为高度敏感的信息。

The OAuth 2.0 Authorization Framework: Bearer Token Usage的建议 :

如果不记名令牌在页面 URL 中传递,攻击者可能能够从历史数据、日志或其他不安全的位置窃取它们。

我认为也不建议将令牌记录到错误日志中。

然而,Asp.Net Core 生成信息消息,其中包括不记名令牌(编码和 JSON 格式)

2017-09-15 08:32:42.571 +00:00 [信息] 无法验证令牌“eyJ0eXAiOiJKV1QiLCJhb(我已经截断了令牌,但可以在 JWT.io 中解码完整的令牌)”。Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException:IDX10501:签名验证失败。无法匹配 'kid':'HHByKU-0DqAxxx',令牌:'{"alg":"RS256","typ":"JWT","x5t":"HHByKU-0DqAxxx","kid":"HHByKU- 0DqAxxx"}.{"aud":"https://webjet.group/eb694f3a-xxx","iss":"https://sts.windows.net/5de0e68cxxx","iat":1505464062,"nbf" :1505464062,"exp":1505467962,"acr":"1","aio":"ASQAxxx","amr":["pwd"],"appid":" cc9aa533-xxx","appidacr":"1","e_exp":262800,"family_name":"Freidgeim","given_name":"Michael","groups":[xxx]","2d62738a-xxx"] ,"in_corp":"true","ipaddr":"121.1.1.1","name":"Michael Freidgeim","oid":"138f5eca-xxx","onprem_sid":"S-1-5-21 -xxx","roles":["UATAdmin"],"scp":"user_impersonation","sub":"vTFBQRxxx","tid":"5de0e68c-xxx","unique_name":"Michael.Freidgeim@xxx ","upn":"Michael.Freidgeim@xxx","ver":"1.0"}'。在 System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(字符串令牌,

这是否意味着风险没有那么大,因为微软认为包含在日志中是可以接受的?

还是我们应该从日志中排除 Microsoft/系统信息 LogLevel?这将是非常严格的,因为我们使用信息日志进行调查,以及一些监控/统计(例如登录次数)。

如果我们想同时满足安全性和调查要求,关于将令牌存储到日志中的推荐方法是什么?

2个回答

如果框架的一部分正在记录 INFO 消息,我会在生产环境中抑制这些消息。有可能在上面给出的示例中它还会记录一个不太详细的 ERROR 级别条目?

将数据拆分为具有不同访问限制的操作日志和 SIEM 日志可能是个好主意。这样,您就可以调查大多数问题,而不会泄露 PII 或安全信息。因为那是你的两个担心;该日志会向您的用户显示相当多的个人信息,并且令牌在到期之前都是有效的有效密码(不记名授权)。我们仅将令牌 ID (jit) 记录到操作日志中,但将完整令牌保存在安全事件存储中,以防调查需要完整令牌。