【发布时间】:2020-02-08 05:53:47
【问题描述】:
我想知道是否有最佳实践或标准方法来管理我的用户数据与索赔数据。
场景:用户使用第 3 方登录并被重定向回我的应用程序。此时我所拥有的只是一个映射到我们数据库中用户配置文件的 ID。 Angular 应用程序将向后端 api 发出请求。
所以我想知道将用户在我们数据库中的角色和标志放在哪里,以限制路由访问和其他事情。
我想我可以在每个请求中获取它,但我可以看到它增加了一些开销。
所以我认为我有几个选择:将我的数据添加到会话、将我的数据添加到当前用户 (ClaimsPrincipal) 或使用缓存。这些都有取舍。会话锁,缓存也有同步问题,获取每个请求都有延迟,ClaimsPrincipal 的东西似乎不守规矩?
我使用网络框架 4.7
链接到代码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;
});
}
}
【问题讨论】:
-
看看我的回答here 的一些想法。
-
我最终得到了索赔,我可以做一些很酷的事情来为我的 Angular 应用程序设置 cookie,并将它们用于应用程序权限github.com/ricardosaracino/SamlOwin/blob/master/SamlOwin/…
标签: c# asp.net asp.net-mvc claims-based-identity