是否有任何人可以分享有关与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 回答
你有没有看到this关于使用
ClaimsAuthorizationManager
的博文?使用ClaimsAuthorizationManager
是使用WIF时检查授权的常用方法 .有关如何使用
ClaimsAuthorize
属性或静态ClaimsAuthorize.CheckAccess()
方法在代码中嵌入检查的示例,请参阅Dominick post here . 您可能还想查看WF Security Pack CTP 1 here .