【问题标题】:Asp.net mvc Identity. Logic of limiting authenticationsAsp.net mvc 身份。限制认证的逻辑
【发布时间】:2017-06-09 09:04:39
【问题描述】:

假设,我有两个模型:

class Customer {
    public GUID CustomerID { get; set; }
    public IEnumerable<User> SubscribedUsers { get; set; }
    //other fields
}

class User {
    public GUID UserID { get; set; }
    //other fields
}

我想用 ASP.NET Identity 来实现 BL 以限制授权:如果用户在 SubscribedUsers - 访问被授予否则 - 被拒绝。

我不要求你为我实现它。只需给我最佳实践,我该怎么做,我可以在哪里找到这个业务逻辑的包装......

我想我必须实现自定义OAuthAuthorizationServerProvider,是吗?

【问题讨论】:

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-identity


【解决方案1】:

我认为最简单的方法是添加一个新的声明 (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims)。将其称为 SubscribedOnly 并将此声明添加到指定用户 (How to add claims in ASP.NET Identity)

一般来说,在您尝试覆盖某些内容之前,我会尝试找到一种内置的可能性来解决您的问题。

授权逻辑将放置在您的控制器中。您可以将此属性 [Authorize] 放在您的 Controller 顶部(这意味着每个 ActionMethod 只对登录用户可用)或放在每个 ActionMethod 的顶部,访问应该受到保护。

使用此属性对于各种实现来说非常简单直接!!

如果您正在寻找了解身份或自定义身份的好资源,我会推荐 John Attens 博客:http://johnatten.com/?s=identity

【讨论】:

  • 如果问题被标记为 mvc4,则来自 asp.net 核心的文档可能没有帮助。
  • 取消订阅怎么办?只要声明存在(令牌未过期/用户未注销),用户就可以访问资源。
  • 感谢@RuardvanElburg 检查我的帖子。我认为 Pavel 会找到在 asp.net 4 中实现声明的资源;)如果有人开始一个新项目,我总是建议使用基于声明的身份,因为它是动态的和模块化的。我在编程中遇到的最烦人的问题是需求的增长。这就是为什么模块化、灵活的方法是一种最佳实践的原因......
  • @RuardvanElburg 有很多可能性可以遵循您的订阅删除逻辑。你是对的:需要解决这个问题。但这是一些问题,与索赔没有太大关系..?
猜你喜欢
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
相关资源
最近更新 更多