在本练习中,请不要使用 STS。 只需创建一种 WCF 服务,该服务可以允许您通过 IClaimsPrincipal 访问当前用户的声明。 完成此操作的原理是 FedUtil 将 ClaimsPrincipalHttpModule 添加到您的项目中。 通过该模块,您可以将当前用户的 IPrincipal 对象转换为 IClaimsPrincipal 对象。
备注
必须在提升模式下运行 Visual Studio,FedUtil 才能正常运作。
首先,创建一个声明感知 WCF 服务,如声明感知 WCF 服务中所示。
接下来,在解决方案资源管理器中右键单击您的项目,然后选择“添加 STS 引用”:
.gif)
此时将运行 FedUtil 工具。 您会看到 FedUtil 对话框,第一个页面是“欢迎使用 Federation Utility 工具”:
.gif)
在此页面上,必须输入两个字段:
应用程序配置位置:指定用于 WCF 服务的 web.config 文件的路径。 如果从 Visual Studio 外运行 FedUtil,则此字段为空。 如果从 Visual Studio 内运行 FedUtil,则此字段已包含用于项目的 web.config 文件的路径。 web.config 文件必须已经存在,并且应处于默认状态(即与 Visual Studio 生成时一样)。 如果对同一 web.config 文件运行多次 FedUtil,FedUtil 将仅覆盖其添加到 web.config 文件的内容。
应用程序 URI:指定 WCF 服务的 URI。 请注意,这是一个 .svc 文件。 如果从 Visual Studio 外运行 FedUtil,则此字段为空。 如果从 Visual Studio 内运行 FedUtil,则此字段已包含用于项目的两个 URI:一个使用 localhost,而另一个则使用计算机的完全限定域名(如果有)。 在为声明配置应用程序时,可将此 URI 用作领域值。 如果该 URI 不安全(即未以“https://”开头),则您会在单击“下一步”时收到警告。
提供相应信息后,单击“下一步”。 此时将看到“应用程序信息”页面:
.gif)
选择要配置的服务名称和终结点协定名称,然后单击“下一步”。 如果服务上有多个终结点,而您仅想要为某些终结点配置声明,请选择所需终结点。
此时将出现安全令牌服务页面:
.gif)
选择“无 STS”。 这将创建声明感知的 WCF 服务,且不要求 STS 发出声明。 此服务将获得由该框架创建的默认声明。 单击“下一步”。 此时将看到“摘要”页面:
.gif)
单击“完成”。
如果查看 web.config 文件,将会发现 FedUtil 已对其进行修改:
<configuration>/<configSections>元素现在包含对microsoft.IdentityModel配置部分的引用:<section name="microsoft.identityModel" type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /><configuration>元素现在包含microsoft.identityModel配置部分,此部分包含您先前指定的应用程序 URI:<microsoft.identityModel> <service name="ClaimsAwareService1.Service"> <audienceUris> <add value="https://localhost:64705/ClaimsAwareService1/Service.svc" /> </audienceUris> </service> </microsoft.identityModel>