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

Consuming assemblies enforcing claims-based authorization from console applications

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

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

这些权限已验证:

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

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

  1. 复制 Windows 机器中的角色,并分配给运行控制台应用程序的系统用户。
  2. 修改控制台应用程序以明确地将声明添加到所使用的身份。
  3. 修改权限系统以进行某种覆盖and/or从控制台应用程序注入"dud"权限系统。

None 这些似乎是特别优雅的解决方案。鉴于此,我的问题很简单:在这种情况下,在身份授权的上下文中是否有规范的方法?

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

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

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

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

以上纯属个人猜测,希望大家多多指教。