【问题标题】:Persist user security profile data at custom Claims在自定义声明中保留用户安全配置文件数据
【发布时间】:2017-12-21 21:19:48
【问题描述】:

我的应用程序必须使用用户 api key & api secret 在配置文件/管理中手动提供的使用从外部服务获取数据。

我想防止将这些必要的键查询大量检索到数据库并将其保存在其他地方(假设这些键不会更新得太频繁)。

在我看来,它可以通过下一个选项来实现:

  1. 将MemoryCache 提供程序与SlidingExpiration 一起使用;
  2. 创建自定义 Claim 并将其附加到现有的 Identity 声明集合中;

如果我错了请纠正我,但如果我意识到它是正确的 - 声明的信息是数据的一部分,用于前端的序列化/反序列化后端交互(我不太有信心关于它,但假设它在 cookie 和令牌中使用)。

实际上,多个后台进程(例如消息队列消费者或计划作业)也需要这些密钥。

您是否介意让我知道一种以优化方式保存这些受保护和经常使用的字段的正确方法?

提前谢谢你。

【问题讨论】:

  • 如果它是关于用户的描述性信息,那么将其添加为声明将是合适的。只是不要添加太多数据(例如超过 4kb)
  • 安全角度如何?有没有办法在前端解密这些信息?
  • 当声明存储在 auth cookie 中时,整个事情都被加密了,所以不,客户端看不到内容。
  • 前端是否需要api key/secret?
  • 不,前端不需要这些 api 密钥。它将仅在后端使用。

标签: asp.net asp.net-core asp.net-identity claims-based-identity


【解决方案1】:

当您使用SignInManager 的登录方法之一登录时,它会在浏览器上设置一个带有访问令牌的cookie。此 cookie 包含索赔数据。因此,在随后的授权请求中,您可以查询 User.Claims 字段以访问所需字段,而无需访问您的数据存储。

现在,您是否选择使用声明完全取决于您需要 API 密钥/秘密的频率。您的声明是访问令牌的一部分。如果在每个请求上发送 API 密钥/秘密是合理的,那么声明是理想的选择。


更新:

与其在前端解密令牌,不如将它们与访问令牌一起发送到前端客户端。

如果您不知道IdentityServer4 或OpenIddict,请查看它们。它可能有你需要的一切。

【讨论】:

  • 没关系。还有几个问题:这是否意味着由于密钥已更新(使用注销流程)而应更新声明?有没有办法在前端解密令牌并提取声明信息?
  • @FSou1 是的,api-secret 声明必须保持更新,否则它们可能会失效。至于解密,虽然这是可能的,但最好在登录时将声明数据与访问令牌一起发送。
  • 不不不,我不会在前端解密它,但我真的很担心它是否安全(我的意思是没有人可以窃取和解密它)。
  • @FSou1 TBH Identity 的令牌生成对我来说就像一个黑匣子,所以我不确定他们是否首先对其进行了加密。请检查我上面链接的库。您可以配置您的密钥对,只要您的密钥不离开您的身份验证服务器,您就可以了。
  • 我想我可以在 HttpContext.Session 中保留这些信息,在这种情况下,数据将得到保护
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2022-12-04
  • 1970-01-01
相关资源
最近更新 更多