事后才在 ASP.NET Web App 中实现安全性

Posted

技术标签:

【中文标题】事后才在 ASP.NET Web App 中实现安全性【英文标题】:Implementing Security in ASP.NET Web App as afterthought 【发布时间】:2012-06-04 11:10:09 【问题描述】:

与许多现实世界的应用程序一样,安全性(登录名/密码)只是用来授予/拒绝对整个应用程序的访问权限。现在客户要求提供细粒度的安全性,例如某些网页应该只能查看,某些用户可以删除其他不能等。 基本上客户要求以下。

有效权限:: 用户--> 网页--> 访问类型(查看、创建/编辑、删除)

申请详情

ASP.NET/C# 用于 Biz 数据的 MSSQL Server 2008 用于用户/密码/配置文件/日志的 SQLCE 用于主 UI 的 Ext.NET

我们讨论过最好增强 security.sdf 文件并有一个屏幕(网页)表和一个用户 + 屏幕 + 表示访问类型的数字的连接表,即

1:阅读 2:写 4:删除

这些可以使用按位运算符进行检查。该应用程序使用 ASP.NET 模拟来获得对 MSSQL2008 的访问权限

问题是如何在Web应用程序中实现它?

如果有人有更好的想法,请分享!!!

【问题讨论】:

【参考方案1】:

您可以使用IsInRole 函数并将您的用户分类为角色。每个角色都可以有一些只能执行的操作。因此,通过询问女巫角色是用户,您可以让他做或不思考。

HttpContext.Current.User.IsInRole("Role")

或者你可以反过来做,询问这个动作是否适用于这个角色,这里是一个简单的对象,有权限和检查。

public enum csPermissions

    pActionDelete = 1,   
    pActionEdit = 2 , 
    // more names...


private int[] AdminPermission =  
    (int)csPermissions.pActionEdit, 
    (int)csPermissions.pActionDelete, 
    // more permissions...
;

private int[] BackOfficePermission =  
    (int)csPermissions.pActionEdit, 
    // more permissions...
; 

public static bool IsThisAllowed(csPermissions AskPermitForThisAction)

    // questions here for all users roles...
    // here is only an example 
    if (HttpContext.Current.User.IsInRole("Administator")))
    
        for (int i = 0; i < AdminPermission.Length; i++)
            if (AdminPermission[i] == (int)AskPermitForThisAction)
                return true;
     

    // no permission found  
    return false;
 

【讨论】:

以上是关于事后才在 ASP.NET Web App 中实现安全性的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET Core 5.0 Web API 中实现 DelegatingHandler?

如何使用 asp.net Web 表单在 Telerik 树中实现搜索和过滤

ASP.NET Web API中实现版本

在ASP.NET中实现OAuth2.0之打造自己的API安全策略

如何在 ASP.NET MVC 5 和 WEB API 2 中实现 oauth2 服务器 [关闭]

如何在ASP.NET Core中实现一个基础的身份认证