首页 文章

WF4服务和WIF集成

提问于
浏览
3

是否有任何人可以分享有关与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

    你有没有看到this关于使用 ClaimsAuthorizationManager 的博文?使用 ClaimsAuthorizationManager 是使用WIF时检查授权的常用方法 .

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

相关问题