我有一个用户直接调用外部系统来处理一些数据的场景.外部系统依赖于AD中的用户被正确模拟/认证.
现在呼叫系统必须改变,这样一个队列就位于用户和外部系统之间,并且从队列中的工作由Windows服务从该队列移交给外部系统.
该服务需要模拟用户,以便外部系统正确处理用户权限.
鉴于我无法更改外部系统,无法将用户名和密码存储在队列中,所以当用户将新的工作项添加到队列中时,可以保存Kerberos票证,并在以后通过该服务模拟用户.数据到外部系统.在C#中怎么做?
解决方法
作为一个微软的家伙曾经告诉我们,“安全是在部署应用程序时停止应用程序的事情”. (他的观点是用现实的安全设置进行测试).
票可能有一个10小时的终身,但这是从发布之日起的时间.在用户提出请求时,它可能只剩下一小部分.
我建议你用不同的方式解决潜在的问题.
你现在需要排队的原因是什么?只是因为外部服务在高峰期被窒息?
你可以加强硬件还是扩展硬件?通常是最便宜的方式.
>您实际上是否拥有完全独立的权限,还是将用户插入有限数量的角色?如果角色可以记录用户所在的角色,并使用专门创建的用户名来访问外部服务,则每个角色一个.
外部服务是你的吗?你可以添加一个“假装是Bob”选项,它不依赖于Windows模拟?
>你可以在模拟器下启动一个单独的线程,从那里发出请求,不管花费多长时间?然后邮寄给用户? (是的,这将在封面下做你所要求的)
>最后你可以把用户放在一个浏览器的“配给队列”里.即发出一个数字,然后让浏览器每10秒刷新一次(或使用Ajax),告诉他们有多少人在他们之前排队.轮到的时候,请假冒的实际请求. (这需要他们在等待队列时保持浏览器窗口打开,并且还要求您跟踪未完成的请求和活动浏览器与远程浏览器).讨厌,但会工作.
不知道实际的问题,这是很难建议,除了说不要这样做 – 太多的陷阱.