我有一个使用Business层的工作流(在一个单独的dll中) 此业务层使用IPrincipal角色检查权限,因此工作流活动必须在调用业务层上的方法之前在当前线程上设置Principal。
在延迟活动后恢复wrokflow时我遇到了问题:角色/ IIdentity丢失(或更糟:错误)。
有人知道如何处理这种情况,并确保在恢复时,它会在延迟之前使用IPrincipal设置吗? 或者您对如何管理工作流中的角色有任何想法吗?
谢谢!
答案 0 :(得分:1)
我的方法是将原始主体存储为工作流变量(在我的例子中为IClaimsPrincipal)。
这有两个好处。
首先,它被持久化,以便如果工作流程持续存在然后恢复,原始主体仍然存在。这也很重要,因为在工作流程恢复时,获得本人的原始上下文可能不再可用。
其次(特别是对于工作流服务),它允许我通过调用另一个服务操作(通过相关实质上是相同的逻辑会话)来检查主体是否继续工作流是与启动会话的用户相同(与变量)。
答案 1 :(得分:0)
可能仍然可以通过OperationContext.Current.ServiceSecurityContext获取身份验证信息 - 以下文章可能会有所帮助:
http://zamd.net/2010/07/04/using-wif-with-workflow-services/ http://msmvps.com/blogs/theproblemsolver/archive/2010/09/21/using-the-wcf-operationcontext-from-a-receive-activity.aspx