使用 SAP 适配器进行安全编程

使用添加适配器服务引用 Visual Studio 插件时如何保护凭据?

使用“添加适配器服务引用”插件创建 WCF 客户端时,必须为 SAP 系统提供用户名和密码。 应仅从“配置适配器”对话框上的“安全性”选项卡执行此操作。 通过从“ 安全性 ”选项卡输入 SAP 凭据,而不是直接输入 “URI” 字段,可以确保以下各项:

  • 凭据不会显示在“添加适配器服务引用插件”对话框的 “URI ”字段中,可访问计算机屏幕的任何人都可以读取这些凭据。

  • 凭据不会显示在添加适配器服务引用插件生成的配置文件中。

    有关如何使用添加适配器服务引用插件生成 WCF 客户端的详细信息,包括如何输入 SAP 系统的用户名和密码,请参阅 在 Visual Studio 中获取 SAP 操作的元数据

在代码中设置凭据的最佳做法是什么?

WCF 提供 ClientCredentials 类,以帮助配置客户端通信对象(如 ChannelFactory)用于向服务进行身份验证的凭据。 通过使用 ClientCredentials 类,可确保 WCF 采用该对象的通道堆栈中指定的任何身份验证机制,并将其应用于客户端与服务之间的交换。

由于 SAP 适配器在进程内托管其使用应用程序,因此不必使用 ClientCredentials 类在使用方应用程序使用的客户端通信对象上设置凭据。 然而,这样做被认为是很好的做法。

SAP 适配器鼓励通过 AcceptCredentialsInUri 绑定属性使用 ClientCredentials 类。 此属性指定适配器是否接受连接 URI 中 SAP 系统的用户名和密码。 AcceptCredentialsInUri 默认为 false,这意味着,如果连接 URI 包含凭据,适配器将引发异常。 可以将 AcceptCredentialsInUri 设置为 true ,以在连接 URI 中提供凭据。 事实上,在某些情况下必须执行此操作;例如,在入站方案中为服务主机终结点或 IReplyChannel 指定连接 URI 时。

以下示例演示如何使用 ClientCredentials 类在 WCF 客户端上设置 SAP 系统的凭据。

SAPBinding binding = new SAPBinding();  
  
// Set endpoint address  
EndpointAddress endpointAddress = new EndpointAddress("sap://CLIENT=800;LANG=EN;@a/YourSAPHost/00?RfcSdkTrace=False&AbapDebug=False&UseSapGui=Without");  
  
// Create client and set credentials  
RfcClient rfcClient = new RfcClient(binding, endpointAddress);  
rfcClient.ClientCredentials.UserName.UserName = "YourUserName";  
rfcClient.ClientCredentials.UserName.Password = "YourPassword";  

如何跨进程边界提供更安全的数据交换?

SAP 适配器与使用它的应用程序或服务一起托管在进程内。 由于适配器与使用者一起托管在进程内,因此无需为使用者和 SAP 适配器之间交换的消息提供安全性。 但是,如果使用的应用程序或服务将包含敏感数据库信息的消息跨进程边界发送到另一个服务或客户端,则应采取措施,为环境中的此数据提供足够的保护。 Windows Communication Foundation (WCF) 提供了许多选项来帮助保护在客户端和服务之间发送的消息。 有关帮助保护 WCF 中的客户端和服务之间发送的消息的详细信息,请参阅 保护服务和客户端。 有关 WCF 提供的安全功能的更多常规信息,请参阅 Windows Communication Foundation 安全性

另请参阅

保护 SAP 适配器的最佳做法
保护 SAP 应用程序