0

実験プロジェクトでは、サービスに苦労しています。クライアントは ASP.NET MVC 4 で、サービスは WCF でビルドされます。今のところ、すべてのシステムは信頼できるサブシステムにあるため、SSL/証明書は必ずしも必要ではありません。

私が現在扱っている問題は次のとおりです。次のような新しい GenericIdentity を作成するときに可能ですか

IIdentity newIdentity = new GenericIdentity("Test", "Custom authentication");
string[] newRoles = { "TestRole" };
IPrincipal testPrincipal = new GenericPrincipal(newIdentity, newRoles);
Thread.CurrentPrincipal = testPrincipal;

次のコードを呼び出す WCF サービスを使用しているときに、作成されたユーザーを持つことができます。

ServiceSecurityContext.Current.WindowsIdentity;

または

ServiceSecurityContext.Current.PrimaryIdentity;

または

Thread.CurrentPrinicpal;

クライアントで作成したユーザーを取得しますか? それとも、これのために WCF 拡張機能を作成する必要がありますか?

現在、WsHttpBinding とセキュリティ モードの Transport と clientCredentialType: Windows を使用しています。もしかして設定がおかしい?

4

2 に答える 2

1

サーバー側 (WCF) では、セキュリティ コンテキストには、サービスへの認証に使用したユーザー名の値が含まれます。

つまり、クライアント側の Windows 認証で定義した場合、WCF は、使用した Windows ID のユーザー名で満たされたセキュリティ コンテキストを検出します。

Windows アカウントでサービスを認証するには、クライアント側で次のコードを使用できます。

channelFactory.Credentials.Windows.ClientCredential =
                        new NetworkCredential(username, password, domain);

このコードを使用すると、次のコードでサーバー側の ID にアクセスできます。

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity

一般に、クライアント側の認証情報を明示するようにしてください。現在、現在のスレッドに ID を設定することで、Windows 認証スキーマのデフォルトの動作を使用しているようです。

これが役立つことを願っています。

于 2012-12-25T17:31:42.727 に答える
0

WCFでこれを自動的に達成するには、証明書を指定する必要があることを発見しました...

WCF サービスに送信されるメッセージで、GenericPrinicpal を作成するために必要な datacontract 内の情報を使用して、いくつかのプロパティを作成しました (このユーザー名とロール)。信頼できるサブシステムがあるため、各 WCF サービスでユーザーを認証したくありません (シナリオのオーバーヘッドが大きくなります)。信頼できるサブシステムも参照してください

これにより、パラメーター インスペクターを実装する WCF 拡張機能を作成し、リフレクションを使用して、コントラクトの指定されたプロパティで CurrentPrincipal からの資格情報を設定しました。パラメーター インスペクターとその適用方法の詳細については、

于 2013-01-06T14:28:56.090 に答える