WF4服务和WIF集成

时间:2011-05-16 20:24:28

标签: wcf workflow-foundation-4 wif

是否有任何人可以分享有关与Windows Identity Foundation集成的Workflow 4.0服务的经过验证的模式?我们正在寻找检查STS令牌和声明的最佳方法,以便派生用户在工作流服务实例上下文之外的人,并使应用程序的用户对象可用于工作流上下文。

我们希望保持WIF的服务实现与工作流业务逻辑之间的关注点分离,以便我们的工作流服务具有高度可测性。我们已经看到提供了一些示例,这些示例指向使用代码活动包装Receive活动,该代码活动实例化IReceiveMessageCallback的实现以获取对OperationContext的引用。 Link to Maurice's Blog Post.但是,这意味着服务内部的活动依赖于操作上下文的存在,甚至可能依赖于IClaimsIdentity。

我们目前可以提出的最佳解决方案是为服务创建IDispatchMessageInspector实现,该服务询问令牌并创建工作流所需的应用程序用户对象,使其可通过InstanceContext.Extensions提供给工作流运行时。这似乎有效,但感觉不完全稳固。非常感谢任何帮助或反馈!

服务行为

public class SecurityTokenServiceBehavior : IServiceBehavior, IDispatchMessageInspector
{
...
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        var claimsPrincipal = (IClaimsPrincipal)(Thread.CurrentPrincipal is GenericPrincipal ? null : Thread.CurrentPrincipal);

        ...

        instanceContext.Extensions.Add(new SecurityContextExtension(appUser, audit));
        return null;
    }
...
}

IReceiveMessageCallback

public class SecurityContextCallback : IReceiveMessageCallback
{
    [DataMember]
    public SecurityContextExtension SecurityContext { get; private set; }

    public void OnReceiveMessage(OperationContext operationContext, ExecutionProperties activityExecutionProperties)
    {
        SecurityContext = operationContext.InstanceContext.Extensions.Find<SecurityContextExtension>();
    }
}

1 个答案:

答案 0 :(得分:0)

您是否看到有关使用ClaimsAuthorizationManager的{​​{3}}博文?使用ClaimsAuthorizationManager是使用WIF时检查授权的常用方法。

有关如何使用ClaimsAuthorize属性或静态ClaimsAuthorize.CheckAccess()方法在代码中嵌入检查的示例,请参阅Dominick帖子this。您可能还想查看WF安全包CTP 1 here