2

私は Web サービスを持っています (WCF または ASMX は関係ありません)... コンソール アプリケーションを作成し、右クリックして、サービス参照を追加しました。ここまでは順調ですね。

ただし、私の人生では、「セキュリティ」資格情報をサービスに渡すことはできません。これは私のクライアントコードです:

var client = new MyClient();

client.ClientCredentials.UserName.UserName = "bob";
client.ClientCredentials.UserName.Password = "123!!";

client.HelloWorld();

client.Close();

しかし、サーバー上では、何をしても (aspnetcompant モードのオンとオフ、wcf サービス、asmx サービス、カスタム http ハンドラーなど)...「bob:123!!」が見つかりません。どこでも。ヘッダーにも、HttpContext.Current.User.Identiy.Nameにも、Thread.CurrentPrincipalにもありません...何もありません。

ここで何が欠けていますか?

4

8 に答える 8

4

カスタム バリデータに関するこの記事を確認しましたか: http://www.leastprivilege.com/FinallyUsernamesOverTransportAuthenticationInWCF.aspx ?

また、これに取り組んだときに役に立ったことの 1 つは、Web サーバーのそのディレクトリへの匿名アクセスを無効にすることでした。認証されていない場合、HttpContext.Current.User.Identity.Name は常に空の文字列を返します。したがって、正しく認証しているように見えて、ユーザー名が「見つからない」だけのように見えますが、実際には匿名でログインしています。少なくとも匿名アクセスを無効にすると、例外が発生し、認証側をより簡単に把握できるようになります。これが最も難しい部分です。

于 2009-01-01T18:00:00.600 に答える
2

はい、あります。SSLを使用しない場合、.Netは例外をスローします。だからどうやらあなたはSSLなしでは私がやりたいことをすることができないようです。

于 2008-12-19T15:46:34.857 に答える
1

SSL なしでユーザー名とパスワードを渡すことができる TransportCredentialOnly に関する情報については、 http : //developers.de/blogs/damir_dobric/archive/2006/07/31/890.aspxを参照してください。

ユーザーのパスワードをプレーンテキストで公開しているため、これはテスト環境でのみ行う必要があります。

于 2009-03-03T00:48:33.047 に答える
0

私の理解では、WCFは統合認証ではなく、メッセージレベルの認証を行います。どちらの場合でも、クレデンシャルを渡すことがSSLなしでできることかどうかはわかりません...

エンドポイントで(IIS経由で)匿名認証をオンにしてみましたか?私の理解では、WCFはHTTPヘッダー(Windows Integrated、SPNegoなどの統合認証メソッドで使用される)ではなく、メッセージレベルのセキュリティ(メッセージヘッダーで渡されるユーザー名/パスワード)を使用します。

私が見つけたいくつかのリンク...

于 2008-12-21T10:56:29.090 に答える
0

エンドポイント バインディングで UserName (メッセージ セキュリティ) または Basic (トランスポート セキュリティ) のクライアント資格情報の種類を構成しましたか?

于 2008-12-19T11:51:00.260 に答える
0

私があなたの質問を正しく理解していれば、WCF サービスのユーザー名認証が正常に構成されており (申​​し訳ありませんが、WCF に焦点を当てます)、サービスのメソッド内でユーザー名とパスワードにアクセスしたいと考えています。

からユーザー名ServiceSecurityContext.Current.PrimaryIdentityにアクセスできますが、パスワードに簡単にアクセスできるとは思えません。

私が Web で見つけた 1 つの提案は、私があまり好きではありませんが、カスタム バリデーターがユーザー名とパスワードの辞書を保持することであり、後でユーザー名を指定してコードからアクセスできます。

私はいくつかの理由でこれが好きではありません.これが当てはまるシステム)、間違ったものを取得する可能性があります。

于 2009-01-01T08:21:35.573 に答える
0

これにアクセスしてみましたか?(特に、独自の認証システムと、独自の UsernamePassword および Certificate バリデーターを使用している場合。

System.ServiceModel.ServiceSecurityContext.Current.PrimaryIdentity.Name

発信者の名前はわかりますが、パスワードはわかりません。

于 2009-05-22T11:21:40.020 に答える
0

方法: カスタム ユーザー名とパスワード バリデーターを使用します

于 2009-05-22T11:51:44.750 に答える