Microsoft致力于保护最终用户隐私。 使用 Windows Communication Foundation(WCF)版本 3.0 生成应用程序时,应用程序可能会影响最终用户的隐私。 例如,应用程序可以显式收集用户联系人信息,也可以通过 Internet 请求或向网站发送信息。 如果在应用程序中嵌入Microsoft技术,该技术可能具有可能影响隐私的行为。 WCF不会从您的应用程序向Microsoft发送任何信息,除非您或终端用户选择将其发送给我们。
WCF 简要介绍
WCF 是使用 Microsoft .NET Framework 的分布式消息传送框架,可让开发人员生成分布式应用程序。 两个应用程序之间通信的消息包含标头和正文信息。
标头可能包含消息路由、安全信息、事务等,具体取决于应用程序使用的服务。 默认情况下,消息通常会加密。 唯一的例外是使用BasicHttpBinding
时,该工具专用于非安全的旧式 Web 服务。 作为应用程序设计器,你负责最终设计。 SOAP 正文中的消息包含特定于应用程序的数据;但是,此数据(如应用程序定义的个人信息)可以使用 WCF 加密或保密功能进行保护。 以下部分介绍可能影响隐私的功能。
消息传送
每个 WCF 消息都有一个地址标头,该标头指定消息目标以及答复应转到的位置。
终结点地址的地址组件是标识终结点的统一资源标识符(URI)。 该地址可以是网络地址或逻辑地址。 该地址可能包括计算机名称(主机名、完全限定域名)和 IP 地址。 终结点地址还可以包含全局唯一标识符(GUID)或用于识别每个地址的临时地址的 GUID 集合。 每个消息都包含一个消息 ID,该消息 ID 是 GUID。 此功能遵循 WS-Addressing 参考标准。
WCF 消息传送层不会将任何个人信息写入本地计算机。 但是,如果服务开发人员创建了一个公开此类信息的服务(例如,在终结点名称中使用人员的姓名,或在终结点的 Web 服务描述语言中包含个人信息,但不需要客户端使用 https 访问 WSDL),则可能会在网络级别传播个人信息。 此外,如果开发人员针对公开个人信息的终结点运行 ServiceModel 元数据实用工具工具(Svcutil.exe) 工具,该工具的输出可能包含该信息,并将输出文件写入本地硬盘。
托管
WCF 中的托管功能允许应用程序按需启动或启用多个应用程序之间的端口共享。 WCF 应用程序可以托管在 Internet Information Services (IIS)中,类似于 ASP.NET。
托管不会公开网络上的任何特定信息,也不会在计算机上保留数据。
消息安全性
WCF 安全性为消息传递应用程序提供安全功能。 提供的安全功能包括身份验证和授权。
身份验证是通过在客户端和服务之间传递凭据来执行的。 身份验证可以通过传输级安全性或通过 SOAP 消息级安全性进行,如下所示:
在 SOAP 消息安全性中,身份验证通过用户名/密码、X.509 证书、Kerberos 票证和 SAML 令牌等凭据执行,所有这些凭据可能包含个人信息,具体取决于颁发者。
使用传输安全性,身份验证是通过传统传输身份验证机制(如 HTTP 身份验证方案(基本、摘要、协商、集成 Windows 授权、NTLM、无和匿名)和表单身份验证来完成的。
身份验证可能会导致在通信终结点之间建立安全会话。 该会话由一个 GUID 标识,该 GUID 在安全会话的整个生存期内持续有效。 下表显示了保留的内容和位置。
数据 | 储存 |
---|---|
表示凭据,例如用户名、X.509 证书、Kerberos 令牌和对凭据的引用。 | 标准 Windows 凭据管理机制,例如 Windows 证书存储。 |
用户成员身份信息,例如用户名和密码。 | ASP.NET 成员资格提供程序。 |
用于向客户端验证服务身份的标识信息。 | 服务的终结点地址。 |
调用方信息。 | 审核日志。 |
审计
审核记录身份验证和授权事件的成功和失败。 审核记录包含以下数据:服务 URI、动作 URI 和调用方的标识。
审核还会记录管理员修改消息日志记录的配置(将其打开或关闭),因为消息日志记录可能会记录标头和正文中特定于应用程序的数据。 对于 Windows XP,记录在应用程序事件日志中。 对于 Windows Vista 和 Windows Server 2003,记录在安全事件日志中。
交易
事务功能向 WCF 应用程序提供事务服务。
事务传播中使用的事物标头可能包含事务 ID 或登记 ID(这些 ID 都是 GUID)。
事务功能使用Microsoft分布式事务处理协调器(MSDTC)事务管理器(Windows 组件)来管理事务状态。 默认情况下,事务管理器之间的通信是加密的。 事务管理器会将终结点引用、事务 ID 和登记 ID 作为其持久状态的一部分进行记录。 此状态的生存期由事务管理器日志文件的生存期确定。 MSDTC 服务拥有和维护此日志。
事务功能实现 WS-Coordination 和 WS-Atomic 事务标准。
可靠会话
WCF 中的可靠会话在发生传输或中间故障时提供消息传输。 即使基础传输断开连接(例如无线网络上的 TCP 连接)或丢失消息(HTTP 代理删除传出或传入消息),它们也提供消息的一次性传输。 可靠会话还会恢复消息重新排序(在多路径路由的情况下可能发生),并保留消息的发送顺序。
可靠会话是使用 WS-ReliableMessaging (WS-RM) 协议实现的。 它们添加 WS-RM 标头,其中包含会话信息,用于标识与特定可靠会话关联的所有消息。 每个 WS-RM 会话都有一个标识符,该标识符是 GUID。
最终用户的计算机上不会保留任何个人信息。
排队通道
队列代表接收应用程序存储来自发送应用程序的消息,稍后将这些消息转发到接收应用程序。 例如,当接收应用程序是暂时性的时,它们有助于确保将消息从发送应用程序传输到接收应用程序。 WCF 通过使用 Microsoft 消息队列 (MSMQ) 作为传输来提供对队列的支持。
排队通道功能不会向消息中添加标头。 而是创建一个消息队列消息,并设置适当的消息队列消息属性,并调用消息队列方法将消息放入消息队列队列中。 消息队列是 Windows 附带的可选组件。
排队通道功能不会在最终用户的计算机上保留任何信息,因为它使用消息队列作为队列基础结构。
COM+ 集成
此功能包装现有的 COM 和 COM+ 功能,以创建与 WCF 服务兼容的服务。 此功能不使用特定标头,也不会在最终用户的计算机上保留数据。
COM 服务标记
此功能向标准的 WCF 客户端提供非托管包装。 此功能在网络上没有特定的标头,也不会保留计算机上的数据。
对等通道
对等通道支持使用 WCF 开发多方应用程序。 多方消息传送发生在网格的上下文中。 网格由节点可以加入的名称来标识。 对等通道中的每个节点在用户指定的端口上创建 TCP 侦听器,并与网格中的其他节点建立连接,以确保复原能力。 若要连接到网格中的其他节点,节点还会交换一些数据,包括侦听器地址和计算机的 IP 地址,以及网格中的其他节点。 网格中发送的消息可以包含与发件人相关的安全信息,以防止消息欺骗和篡改。
最终用户的计算机上不存储任何个人信息。
IT 专业经验
追踪
WCF 基础结构的诊断功能记录通过传输和服务模型层传递的消息,以及与这些消息关联的活动和事件。 默认情况下,此功能关闭。 它通过应用程序的配置文件启用,并且可在运行时通过 WCF WMI 提供程序修改跟踪行为。 在启用此功能后,跟踪基础结构会向已配置的侦听器发出包含消息、活动和处理事件的诊断跟踪。 输出的格式和位置由管理员的侦听器配置选项确定,但通常是 XML 格式化文件。 管理员负责在跟踪文件上设置访问控制列表(ACL)。 具体而言,当由 Windows 激活系统(WAS)托管时,管理员应确保这些文件在不需要的情况下不会从公共虚拟根目录提供。
有两种类型的跟踪:消息日志记录和服务模型诊断跟踪,如下部分所述。 每种类型都通过其自己的跟踪源进行配置: MessageLogging 和 System.ServiceModel。 这两个日志记录跟踪源捕获应用程序本地的数据。
消息日志记录
消息日志记录跟踪源(MessageLogging)允许管理员记录流经系统的消息。 通过配置,用户可能决定仅记录整个消息或消息标头,无论是在传输层和/或服务模型层上记录,还是包括格式不正确的消息。 此外,用户可以配置筛选以限制记录的消息。
默认情况下,消息日志记录处于禁用状态。 本地计算机管理员可以阻止应用程序级管理员打开消息日志记录。
加密和解密的消息日志记录
消息会记录、加密或解密,如以下术语中所述。
传输记录 记录在传输级接收和发送的消息。 这些消息包含所有标头,并且可以在网络上发送之前以及接收时进行加密。
如果消息在网络上发送之前以及在接收时进行加密,那么还会记录加密后的消息。 例外情况是使用安全协议(https):数据在发送之前和收到之后都会被记录为解密状态,即使它们在传输过程中是加密的。
服务记录 在通道标头处理已经发生后,刚好在进入用户代码之前和之后记录在服务模型层接收或发送的消息。
在此级别记录的消息,即使在网络传输中已被保护和加密,也将被解密。
格式错误消息记录 记录 WCF 基础结构无法理解或处理的消息。
消息按原样(即,加密或不加密)进行记录。
当消息以解密或未加密的形式登录时,默认情况下 WCF 会先从消息中删除安全密钥和潜在的个人信息,然后再记录它们。 后续部分介绍删除的信息以及何时删除。 计算机管理员和应用程序部署程序必须执行某些配置作,才能将默认行为更改为记录密钥和潜在的个人信息。
记录解密/未加密消息时从消息标头中删除的信息
当消息以解密或未加密的形式记录时,默认情况下,会从消息头和消息正文中删除安全密钥和潜在的个人信息。 以下列表显示 WCF 所认为的密钥及可能涉及的个人信息。
已删除的密钥:
对于
xmlns:wst="http://schemas.xmlsoap.org/ws/2004/04/trust"
和xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust"
wst:BinarySecret
wst:Entropy
对于
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.1.xsd"
和xmlns:wsse="http://docs.oasis-open.org/wss/2005/xx/oasis-2005xx-wss-wssecurity-secext-1.1.xsd"
wsse:Password
wsse:Nonce
可能删除的个人信息:
对于
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.1.xsd"
和xmlns:wsse="http://docs.oasis-open.org/wss/2005/xx/oasis-2005xx-wss-wssecurity-secext-1.1.xsd"
wsse:Username
wsse:BinarySecurityToken
对于
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
,会移除采用bold
格式的以下项:
<Assertion MajorVersion=“1” MinorVersion=“1” AssertionId=“[ID]” Issuer=“[string]” IssueInstant=“[dateTime]”
<Condition NotBefore=“[dateTime]” NotOnOrAfter=“[dateTime]”><AudienceRestrictionCondition><Audience>[uri]</Audience+ </AudienceRestrictionCondition>* <DoNotCacheCondition> />* --抽象基类型<条件 />* <
</条件>?
<Advice><AssertionIDReference>[ID]</AssertionIDReference>* <Assertion>[assertion]</Assertion>* [any]* </Advice>?
<--抽象基类型 <语句 />* <SubjectStatement><Subject>
<NameIdentifier
NameQualifier="[string]"?
Format="[uri]"?
>
[string]
</NameIdentifier>?
<SubjectConfirmation><ConfirmationMethod>[anyUri]</ConfirmationMethod>+ <SubjectConfirmationData>[any]</SubjectConfirmationData>?
<ds:KeyInfo>...</ds:KeyInfo>?
</SubjectConfirmation>?
</主题></主题声明>*
<AuthenticationStatement AuthenticationMethod=“[uri]” AuthenticationInstant=“[dateTime]”
[主题]
<SubjectLocality
IPAddress="[string]"?
DNSAddress="[string]"?
/>?
<AuthorityBinding AuthorityKind=“[QName]” Location=“[uri]” Binding=“[uri]” /* </>AuthenticationStatement>* <AttributeStatement> [Subject] <AttributeName=“[string]” AttributeNamespace=“[uri]”
<AttributeValue>[any]</AttributeValue>+
</Attribute>+ </AttributeStatement>* <AuthorizationDecisionStatement Resource=“[uri]” Decision=“[Permit|拒绝|不确定]”
[主题] <Action Namespace=“[uri]”>[string]</Action>+ <Evidence><AssertionIDReference[ID]</AssertionIDReference>>+ <Assertion[assertion>]</Assertion>+ </Evidence>? </AuthorizationDecisionStatement>* </Assertion>
在记录解密/未加密消息时从消息正文中删除的信息
如前所述,WCF 从已记录的解密和未加密消息的消息标头中删除密钥和已知个人信息。 此外,WCF 还会从以下列表中的正文元素和操作(它们描述了密钥交换过程中涉及的安全消息)的消息正文中删除密钥和已知的潜在个人信息。
对于以下命名空间:
xmlns:wst="http://schemas.xmlsoap.org/ws/2004/04/trust"
和 xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust"
(例如,如果没有可用的操作)
对于涉及密钥交换的这些正文元素,将删除信息:
wst:RequestSecurityToken
wst:RequestSecurityTokenResponse
wst:RequestSecurityTokenResponseCollection
以下每个操作的信息也将被删除。
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/Issue
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Renew
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/Renew
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Cancel
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/Cancel
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Validate
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/Validate
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/SCT
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT/Amend
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/SCT/Amend
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT/Renew
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/SCT/Renew
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT/Cancel
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/SCT/Cancel
http://schemas.xmlsoap.org/ws/2004/04/security/trust/RST/SCT
http://schemas.xmlsoap.org/ws/2004/04/security/trust/RSTR/SCT
http://schemas.xmlsoap.org/ws/2004/04/security/trust/RST/SCT-Amend
http://schemas.xmlsoap.org/ws/2004/04/security/trust/RSTR/SCT-Amend
不会从特定于应用程序的标头和正文数据中删除任何信息
WCF 不会跟踪应用程序特定标头(例如查询字符串)或正文数据(例如信用卡号)中的个人信息。
启用消息日志记录时,特定于应用程序的标头和正文信息中的个人信息可能会在日志中可见。 同样,应用程序部署器负责在配置和日志文件上设置 ACL。 如果不希望此信息可见,还可以关闭日志记录,或者在记录此信息后从日志文件中筛选掉此信息。
服务模型跟踪
服务模型跟踪源 (System.ServiceModel) 允许跟踪与消息处理相关的活动和事件。 此功能使用 System.Diagnostics 的 .NET Framework 诊断功能。 与 MessageLogging 属性一样,位置和 ACL 是使用 .NET Framework 应用程序配置文件进行用户配置的。 与消息日志记录一样,管理员启用跟踪时始终配置文件位置;因此,管理员控制 ACL。
当消息在范围内时,跟踪包含消息头。 在上一部分的邮件标头中隐藏潜在个人信息的相同规则适用:以前标识的个人信息默认从跟踪中的标头中删除。 计算机管理员和应用程序部署器必须修改配置才能记录潜在的个人信息。 但是,跟踪中会记录特定于应用程序的标头中包含的个人信息。 应用程序部署程序负责在配置和跟踪文件上设置 ACL。 它们还可以关闭跟踪以隐藏此信息,或在记录后从跟踪文件中筛选掉此信息。
作为 ServiceModel 跟踪的一部分,唯一 ID(称为活动 ID,通常为 GUID)在消息经过基础结构的不同部分时,将不同的活动链接在一起。
自定义跟踪侦听器
对于消息日志记录和跟踪,可以配置自定义跟踪侦听器,它可以在网络上发送跟踪和消息(例如,发送到远程数据库)。 应用程序部署程序负责配置自定义侦听器或允许用户执行此作。 他们还负责在远程位置公开的任何个人信息,并正确将 ACL 应用于此位置。
面向 IT 专业人员的其他功能
WCF 具有一个 WMI 提供程序,该程序通过 WMI(随 Windows 一起提供)公开 WCF 基础结构配置信息。 默认情况下,WMI 接口可供管理员使用。
WCF 配置使用 .NET Framework 配置机制。 配置文件存储在计算机上。 应用程序开发人员和管理员为每个应用程序的要求创建配置文件和 ACL。 配置文件可以包含终结点地址和证书存储中的证书链接。 证书可用于提供应用程序数据,以配置应用程序使用的功能的各种属性。
WCF 还通过调用 FailFast 方法使用 .NET Framework 进程转储功能。
IT 专业工具
WCF 还提供以下 IT 专业工具,这些工具在 Windows SDK 中提供。
SvcTraceViewer.exe
查看器显示 WCF 跟踪文件。 该查看器显示跟踪中包含的所有信息。
SvcConfigEditor.exe
编辑器允许用户创建和编辑 WCF 配置文件。 编辑器显示配置文件中包含的任何信息。 可以使用文本编辑器完成相同的任务。
ServiceModel_Reg
此工具允许用户管理计算机上安装的 ServiceModel。 该工具在运行时在控制台窗口中显示状态消息,在此过程中,可能会显示有关 WCF 安装配置的信息。
WSATConfig.exe 和 WSATUI.dll
这些工具允许 IT 专业人员在 WCF 中配置可互作 WS-AtomicTransaction 网络支持。 这些工具显示并允许用户更改存储在注册表中的最常见 WS-AtomicTransaction 设置的值。
横切功能
以下功能是交叉的。 也就是说,它们可以由上述任何功能组成。
服务框架
标头可以包含实例 ID,它是将消息与 CLR 类实例关联的 GUID。
Web 服务描述语言(WSDL)包含端口的定义。 每个端口都有一个终结点地址和一个绑定,表示应用程序使用的服务。 可以使用配置关闭公开 WSDL。 计算机上不会保留任何信息。