【问题标题】:When are the Asp.Net Identity are created and assigned to the user?Asp.Net 身份何时创建并分配给用户?
【发布时间】:2016-09-19 00:56:22
【问题描述】:

我正试图围绕 Asp.Net Identity 展开思考。但不幸的是,可用的文档不是很清楚,或者我觉得它只是在我头上:(

但是,follow 是基于全天研究和阅读的高级理解。当用户登录时,会提供一组声明。使用这些声明,您可以启用/禁用功能。例如,如果用户声称他们的年龄是 30 岁,那么您可以允许他们查看仅限成人的内容,但如果他们声称自己是 17 岁,那么您拒绝访问他/她:)。此外,“管理员”、“超级用户”等用户的角色可用于启用/禁用访问。如果用户具有“Admin”角色,您可以允许他们访问 X 操作方法。

但是,有很多事情让我感到困惑,让我无法清楚地理解它。

场景

假设我想用一个控制器创建一个新的应用程序。这个控制器有两个动作方法AddEdit。我猜我需要为每个用户提供两个声明

new Claim {
  UserId = 10, 
  ClaimType = "Can Add", 
  ClaimValue = null
},

new Claim {
  UserId = 10, 
  ClaimType = "Can Edit", 
  ClaimValue = null
}

new Claim {
  UserId = 5, 
  ClaimType = "Can Edit", 
  ClaimValue = null
}

在这种情况下,Id = 10“可以添加”和“可以编辑”的用户,但 UserId = 5“可以添加”的用户无法编辑。

这些声明何时创建并分配给用户?我是否可以根据需要手动将这些声明插入AspNetUserClaims 表中?我是否将它们分配给用户个人资料中的用户?

如果我以后需要添加新的声明,我需要手动将这个新声明分配给所有用户吗?或者有没有办法将这些声明分配给用户可以继承的默认角色?

这可能不是一个好问题,但回答它会帮助我更好地理解身份。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-identity claims-based-identity


    【解决方案1】:

    用户登录时应设置声明。您不应该直接在数据库中设置它。请参阅this post 了解何时设置声明。

    声明是关于用户的信息。然后,您可以将该信息用于授权(或其他任何内容)。

    请注意,您应该始终为您的Claims 设置一个值,否则您可能会遇到不存在的声明错误。

    【讨论】:

    • 我现在更困惑了。索赔是临时的并且仅对单个会话可用还是永久有效?蛤蜊是获取用户信息的地方,例如他们的姓名、电子邮件、电话......还是我可以知道他们可以做什么/访问的地方可以执行 X 操作,或两者兼而有之?出于某种原因,我开始认为授权包可能不支持开箱即用的权限基础授权。这是我需要实现的东西,并以某种方式获取权限并将它们嵌入到一个自定义声明中吗?
    • 授权不是基于Claims的(你可以根据需要创建ClaimAuthorizationAttribute,但默认不在框架中)。如果要永久存储用户名、电子邮件或电话,请将其放入用户中。在用户中存储数据。如果您需要计算字段,或者只需要无处不在的信息,请使用 Claims。请记住,声明属于身份,而不是用户。
    • 我明白了。谢谢你的信息。最后一个问题,那么声明是临时的,如果是的话,它们什么时候从数据库中删除?此外,基于角色的授权是开箱即用的唯一授权功能吗?什么是 Authorize(Policy="something") 用于?再次感谢您迄今为止提供的信息,这有助于理解整个想法
    • 通常,您会在登录时分配声明。数据库帮助您持久化声明,通常是在您希望在 asp 会话过期后保留登录时。
    • 对于授权,基于角色和基于用户是开箱即用的。关于策略,您可以将其视为一组规则。您还可以将政策基于索赔。这是explain policy based security的好网站。
    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 2017-07-17
    • 2019-09-23
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多