WS-Security を使用し、ASMX Web サービスから UsernameToken にアクセスするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1868246

質問

さて、現在 .NET 3.5 で実行されているレガシー ASMX Web サービスがあり、Visual Studio 2008 を使用しています。

問題は、認証を追加する必要があり、現在認証する必要のない既存の内部クライアントを壊すことなく WS-Security モデルを利用したいということです。

カスタム ヘッダーを追加することも考えましたが、それはあまり WS-Security らしくありません。また、WCF へのアップグレードは長期的な目標ではありますが、短期的には実現可能ではありません。

VS2008 ASMX Web サービスの SOAP ヘッダーで間接的に UsernameToken (クライアントによって渡される場合) にアクセスする方法はありますか?

役に立ちましたか?

解決

試してみてもいいでしょう Web サービス拡張機能 (WSE) 3.0. 。これにより、 古い WS-Security のバージョン (2004 バージョンだと思います。WCF は 2005 および 2007 バージョンをサポートしています)。ASMX を妨げることなく ASMX 上に配置され、.NET 3.5 / WS2008 でも動作します。

次に欠点について説明します。

  • VS2008 は、クライアント コードでの WSE 対応 Web 参照の追加または更新をサポートしていません。通常の ASMX プロキシ クラスは問題なく作成されますが、認証に必要な追加の WSE プロキシ クラスは作成されません。既存の WSE プロキシ コードはコンパイルに問題ありませんが、IDE で Web 参照を更新しようとすると削除されます。VS2005 のコピーを所有している場合は、それを使用してクライアント側で Web 参照を維持または作成できます。
  • 私の知る限り、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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top