使用 Siebel 适配器进行安全编程
使用添加适配器服务参考 Visual Studio 插件时,如何保护凭据?
使用“添加适配器服务引用”插件创建 WCF 客户端时,必须为 Siebel 系统提供用户名和密码。 应仅从“配置适配器”对话框上的“安全”选项卡执行此操作。 通过从“ 安全 ”选项卡输入 Siebel 凭据,而不是直接输入 “Uri” 字段,可以确保以下各项:
凭据不会显示在“添加适配器服务引用插件”对话框的 “URI ”字段中,可访问计算机屏幕的任何人都可以读取凭据。
凭据不会显示在添加适配器服务引用插件生成的配置文件中。
有关如何使用添加适配器服务引用插件生成 WCF 客户端的详细信息,包括如何输入 Siebel 系统的用户名和密码,请参阅 在 Visual Studio 中获取 Siebel 操作的元数据。
在代码中设置凭据的最佳做法是什么?
WCF 提供 ClientCredentials 类,以帮助你配置客户端通信对象(如 ChannelFactory)用于通过服务对自身进行身份验证的凭据。 通过使用 ClientCredentials 类,可确保 WCF 采用该对象的通道堆栈中指定的任何身份验证机制,并将其应用于客户端与服务之间的交换。
由于 Siebel 适配器在其使用的应用程序在进程内托管,因此使用 ClientCredentials 类在使用的应用程序使用的客户端通信对象上设置凭据并不是必需的。 然而,这样做被认为是好的做法。
Siebel 适配器鼓励通过 AcceptCredentialsInUri 绑定属性使用 ClientCredentials 类。 此属性指定适配器是否接受连接 URI 中 Siebel 系统的用户名和密码。 AcceptCredentialsInUri 默认为 false,这意味着如果连接 URI 包含凭据,适配器将引发异常。 可以将 AcceptCredentialsInUri 设置为 true 以在连接 URI 中提供凭据。 事实上,在某些情况下必须执行此操作;例如,使用 ServiceModel 元数据实用工具 (svcutil.exe) 为 Siebel 系统项目生成 WCF 客户端类时。
以下示例演示如何使用 Credentials 类在 ChannelFactory 上设置 Siebel 系统的凭据。
// Create binding and endpoint
SiebelBinding binding = new SiebelBinding();
EndpointAddress endpointAddress = new EndpointAddress("siebel://Siebel_server:1234?SiebelObjectManager=obj_mgr&SiebelEnterpriseServer=entserver&Language=enu ");
// Create the channel factory
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, endpointAddress))
// Set user name and password
factory.Credentials.UserName.UserName = "YourUserName";
factory.Credentials.UserName.Password = "YourPassword";
// Open the channel factory
factory.Open();
以下示例演示如何使用 ClientCredentials 类在 WCF 客户端上设置 Siebel 系统的凭据。
// Initialize a new client for the SQLEXECUTE operation from configuration
BusinessObjects_Account_Account_OperationClient accountAccountClient = new BusinessObjects_Account_Account_OperationClient ("SiebelBinding_BusinessObjects_Account_Account_Operation");
// Set user name and password
accountAccountClient.ClientCredentials.UserName.UserName = "YourUserName";
accountAccountClient.ClientCredentials.UserName.Password = "YourPassword";
// Open the client
accountAccountClient.Open();
如何跨进程边界提供更安全的数据交换?
Siebel 适配器与使用该适配器的应用程序或服务一起托管在进程内。 由于适配器与使用者一起托管在进程内,因此无需为使用者与 Siebel 适配器之间交换的消息提供安全性。 但是,如果使用的应用程序或服务通过进程边界将包含敏感数据库信息的消息发送到另一个服务或客户端,则应采取措施为环境中的此数据提供足够的保护。 Windows Communication Foundation (WCF) 提供了许多选项来帮助保护在客户端和服务之间发送的消息。 有关帮助保护 WCF 中的客户端和服务之间发送的消息的详细信息,请参阅 保护服务和客户端。 有关 WCF 提供的安全功能的更多常规信息,请参阅 Windows Communication Foundation 安全性。