【问题标题】:BizTalk: Caller identify authenicationBizTalk:呼叫者身份验证
【发布时间】:2012-09-11 20:53:48
【问题描述】:

在即将推出的 BizTalk 2010 项目中,我们将有一个客户端调用以提交数据的 Web 服务,以及一个客户端调用以请求数据的 Web 服务。在 biztalk 应用程序级别,这将通过将编排公开为 wcf 服务来实现。

在服务器级别,我们将有一个 2 节点网络农场、一个 2 节点 biztalk 组和一个 sql 集群。 Web 服务显然将部署在 Web 场上,并且编排、发送/接收端口将在 BizTalk 组服务器上运行。

我们希望对调用者进行身份验证并将其身份映射到 Active Directory 帐户,以便在编排级别,我们能够访问调用者的 AD 身份,并将帐户名称传递给一个存储过程数据库。

大概我们可以通过 SSL 证书处理身份映射,但我们以前没有这样做过。那里有一些好的示例/教程吗?

【问题讨论】:

  • 我会考虑利用 Windows 身份框架来执行基于声明的身份。虽然我从未专门针对 BizTalk 做过这件事,但在 AD 级别处理身份并不是 BizTalk 的强项。

标签: authentication ssl-certificate biztalk biztalk-2010


【解决方案1】:

如果您添加端点行为以将名称从 WindowsIdentity 添加到 WCF 标头会怎样?这样(至少在我的情况下)身份更容易在管道的下游获得,但这足以满足您的“帐户名称”目的吗?

#region IDispatchMessageInspector Members

public object AfterReceiveRequest(
    ref System.ServiceModel.Channels.Message request,
    System.ServiceModel.IClientChannel channel,
    System.ServiceModel.InstanceContext instanceContext)
{
    if (ServiceSecurityContext.Current == null || 
        ServiceSecurityContext.Current.WindowsIdentity == null) 
        return null;

    WindowsUserName windowsUserName = new WindowsUserName();
    request.Headers.Add(MessageHeader.CreateHeader(
        windowsUserName.Name, windowsUserName.Namespace,
        ServiceSecurityContext.Current.WindowsIdentity.Name));
    return null;
}

public void BeforeSendReply(ref Message reply, object correlationState)
{
    return;
}

#endregion

在使用客户端证书时同样适用,但使用 PrimaryIdentity 而不是 WindowsIdentity 来获取 BizTalk 方名称。不过,这与 Active Directory 帐户没有直接联系。

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 2018-06-14
    • 2022-07-21
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多