Webサービス拡張機能(WSE)3.0を試すことができます。これにより、古いバージョンのWS-Security(2004バージョン-WCFは2005および2007バージョンをサポートすると思います)のサポートが追加されます。ASMXの上に邪魔されることなく配置され、.NET 3.5/WS2008でも機能します。
欠点については、次のとおりです。
- VS2008は、クライアントコードでのWSE対応のWeb参照の追加または更新をサポートしていません。通常のASMXプロキシクラスは問題なく作成されますが、認証に必要な追加のWSEプロキシクラスは作成されません。既存のWSEプロキシコードはすべて正常にコンパイルされますが、IDEでWeb参照を更新しようとすると削除されます。VS2005のコピーを所有している場合は、それを使用して、クライアント側でWeb参照を維持または少なくとも作成できます。
- AFAIK、WS-SecurityのWSE実装は、WCF実装と100%上位互換性がありません。確認するために、WCFを使用して独自の互換性テストを行う必要があります。
例
クライアントでの資格情報の指定:
void SetUsernameCredential(WebServicesClientProtocol service, string userName, string password) {
UsernameToken token = new UsernameToken(userName, password, PasswordOption.SendHashed);
service.SetClientCredential(token);
}
サーバーでの資格情報の認証:
public class MyUsernameTokenManager : UsernameTokenManager {
protected override string AuthenticateToken(UsernameToken token) {
// Authenticate here.
// If succeess, return an authenticated IPrincipal and the user's password as shown.
// If failure, throw an exception of your choosing.
token.Principal = principal;
return password;
}
}
サーバーでの資格情報の読み取り:
IPrincipal principal = RequestSoapContext.Current.IdentityToken.Principal;