wcf - WF4 服务和 WIF 集成

标签 wcf workflow-foundation-4 wif

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

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

到目前为止,我们能想到的最佳解决方案是为服务创建 IDispatchMessageInspector 的实现,该服务询问 token 并创建工作流所需的应用程序用户对象,使它们通过 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>();
    }
}

最佳答案

你看到了吗this关于使用 ClaimsAuthorizationManager 的博客文章?使用 ClaimsAuthorizationManager 是使用 WIF 时检查授权的常用方法。

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

关于wcf - WF4 服务和 WIF 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6022931/

相关文章:

.net - 构建自定义 "ClaimsAuthorizationManager"Windows Identity Foundation 类的好方法是什么?

php - 将对象数组从 WCF 传递到 PHP - 提取信息

c# - 有人有 ServiceStack 或其他 .Net 服务框架的经验吗?

c# - Windows Workflow 是否适合非编程最终用户?

wpf - 自定义事件设计器中的参数验证

ASP.NET 多个联合身份提供商

java - 使用 SSL 的 Metro Web 服务 - 这是一个安全的对话吗

wcf - 如何删除 ServiceHost 持有的大对象堆上的 Byte[]

c# - Workflow Foundation 4 中的动态数据类型

wcf - Wif 保护 WCF 服务,缓存 token - 异步 wcf 方法丢失身份