使用声明数据管理经过身份验证的用户数据的最佳做法或标准方法



我想知道是否有最佳实践或标准方法来管理我的用户数据与索赔数据。

场景:用户使用第三方登录并重定向回我的应用程序。此时我所拥有的只是一个映射到我们数据库中的用户配置文件的 ID。一个角度应用程序将向后端 API 发出请求。

所以我想知道将用户在我们的数据库中拥有的角色和标志放在何处,以限制路由访问和其他内容。

我想我可以在每个请求中获取它,但我可以看到它增加了一些开销。

所以我想我有几个选择:将我的数据添加到会话,将我的数据添加到当前用户(ClaimPrincipal(或使用缓存。这些都有权衡。会话锁,缓存也有同步问题,获取每个请求都有延迟,ClaimPrincipal 的东西似乎不守规矩?

使用 NET 框架 4.7 的 IM

链接到代码 https://github.com/ricardosaracino/SamlNet


public class UserHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{           
var currentUser = HttpContext.Current.User as ClaimsPrincipal;
var claims = currentUser?.Claims;
var nameIdentifierClaim = claims?.FirstOrDefault(claim => claim.Type == ClaimTypes.NameIdentifier);
var nameId = nameIdentifierClaim?.Value;
// if NOT cached or expired 
// read from database
// set user in cache with nameid
// set request.Properties from cache
request.Properties["currentUser"] = new CurrentUser()
{
Id = Guid.NewGuid()
};
return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
{
var a = request.Properties["currentUser"];
// if modified add back to cache
return task.Result;
});
}
}

我最终将 Owin 与应用程序 Cookie 和声明一起使用。 我能够轻松地将这些转换为客户端状态的 cookie 并将它们用于权限。

这里的好答案

基于声明的授权是否适用于单个资源

相关内容

最新更新