使用程序集从控制台应用程序强制执行基于声明的授权

时间:2015-07-17 08:17:21

标签: asp.net .net asp.net-identity

我目前正在(在现有应用程序中)引入一个自定义权限系统,该系统将声明提供的角色(来自Web应用程序中基于WSFed的OWIN auth)映射到应用程序本身定义的权限。

目前,计划是将权限系统直接备份到线程主体上。

验证了这些权限:

  • 在网络用户界面
  • 在业务层(如果是将来的替代用户界面)。

但是,目前尚未解决的一件事是,有一个控制台应用程序作为计划任务运行,它使用与Web应用程序相同的业务层类(相同的程序集引用)。该应用程序在一个单独的域中的本地Windows用户下运行,该域没有所需的角色(因此无法授权)。

我可以看到这个问题的一些解决方法:

  1. 复制Windows计算机中的角色并分配给运行控制台应用程序的系统用户。
  2. 修改控制台应用以明确将声明添加到使用的身份。
  3. 修改权限系统以进行某种覆盖和/或注入" dud"控制台应用程序的权限系统。
  4. 这些似乎都不是特别优雅的解决方案。鉴于此,我的问题很简单:在这种情况下,在身份认证的背景下是否存在规范方法?

1 个答案:

答案 0 :(得分:1)

非常有趣的问题,没有我所知道的真正的规范答案。

我会选择1或2,具体取决于你的情况。如果您的客户端使用身份验证逻辑,您的控制台应用程序只是另一个客户端,它需要具有在您的系统中执行操作的权限。仅为客户端修改权限系统可以打开安全漏洞,听起来像是一个黑客攻击 - 对于有权限的客户端来说逻辑。

现在介于1和2之间 - 这取决于您正在使用的情况。如果客户端要多次部署或由客户部署,为了简化部署,我会破解命令行应用程序并在那里向主体添加所需的声明。

如果您的命令行客户端是供私人使用而不是多次部署,最简单的方法是让一个单独的域用户拥有该用户的所有必需权限,并从该用户运行该应用程序。这将从应用程序中分离权限,如果您需要更改应用程序用户的权限而不需要在命令行应用程序中更改代码,这将使您的生活更轻松。

这些纯粹是我的猜测,我希望会有其他意见。