[轉貼][WCFSecurity]2.安全引數設定

楊俊明發表於2008-08-19

[原文]http://www.rainsts.net/article.asp?id=473

1. 安全方式

通過設定 Binding 的屬性 Security 來實現。

NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;

2. 訊息保護

通過 ServiceContractAttribute 和 OperationContractAttribute 特性的 ProtectionLevel 引數我們可以設定不同的訊息保護級別。

[ServiceContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)]
interface IMyContract
{
  …
}

3. 身份驗證

不同的部署環境,會採取不同的選擇。在 Intranet 環境下,我們可能選擇 Windows 整合驗證方式,而在 Internet 環境下通常的方案是採取 X.509 數字證書,當然最最通用最最常見依然是使用者名稱/密碼。

以 Windows 整合驗證為例,客戶端可以通過 ClientBase.ClientCredentials 屬性向伺服器端傳送與其相匹配的身份驗證資訊。預設情況下,客戶端使用當前 Windows 登入賬戶作為身份驗證資訊,我們也可以顯式設定不同的身份資訊。

代理方式:

NetworkCredential credentials = new NetworkCredential( );
credentials.Domain = “MyDomain”;
credentials.UserName = “MyUsername”;
credentials.Password = “MyPassword”;

using (MyContractClient client = new MyContractClient())
{
  client.ClientCredentials.Windows.ClientCredential = credentials;
  client.MyMethod( );
}

工廠方式:

ChannelFactory<IMyContract> factory = new ChannelFactory<IMyContract>(“”);
factory.Credentials.Windows.ClientCredential = new NetworkCredential(…);

IMyContract client = factory.CreateChannel( );
using(client as IDisposable)
{
 client.MyMethod( );
}

在服務中,我們可以用 ServiceSecurityContext.Current (或者 OperationContext.Current.ServiceSecurityContext) 來獲取相關身份資訊。

Console.WriteLine(ServiceSecurityContext.Current.WindowsIdentity.AuthenticationType);
Console.WriteLine(ServiceSecurityContext.Current.WindowsIdentity.Name);

我們會在後面的章節詳細講述幾種常見的驗證開發方式。


相關文章