问题描述
我有一个受azureAD(OpenIdConnect)保护的Core3.1 Web应用程序,我从idtoken检索了所需的大多数用户相关数据: 用户名,电子邮件,employeeId,甚至用户的广告组。 我还需要从数据库中获取一些其他数据,而且我不确定如何将这些数据存储在应用程序中,以使其在用户登录的整个时间和整个位置都可用。
我不想使用cookie。现在,我使用了会话。 问题在于此会话与身份验证会话的到期时间不同,因此我不得不调用静态方法来检查变量是否为空,并最终再次执行查询。 它可以工作...但是很丑。
我觉得我应该以不同的方式处理事情,但是我不知道怎么做。
解决方法
基于声明的解决方案在以下情况下最有效:
- 在您的API中定义一个Claims Object
- 在您的API首次收到访问令牌时填充它
- 为具有相同访问令牌的后续请求缓存Claims对象
- 此缓存将始终与用户会话保持同步
有关该模式的更多详细信息,请参见我的blog post。这是一些implementation code。