開発環境: Windows 7 Enterprise with .NET 4.0 with Visual Studio 2010
運用環境: IIS 7.0 を搭載した Windows 2008 サーバー
ASP .NET Web アプリケーションとは別のセキュリティ ゾーンにある別のマシンで実行されている WCF サービスに対して認証および承認する最善の方法を見つけようとしています。
ユーザーは、データベースに保存されている資格情報に対してユーザー名とパスワードを使用してログインします。メンバーシップ プロバイダーは実装しませんでしたが、ユーザーの資格情報がマスタードを通過すると、ユーザー ID を使用してフォーム認証チケットを手動で作成します。
RoleProvider を実装する独自の Role Provider を作成しました。その結果、「標準」の ASP .NET ロールと、ASP .NET Web アプリケーションで動作するフォーム認証チケットが用意されました。
私がする必要があるのは、これらの資格情報を別のマシンにある WCF サービスに渡すことです。当初、私は Windows Identity Foundation を使用して、カスタム セキュリティ トークン サービス (STS) を作成しようと考えていました。基本的に、ユーザーが認証されたら、トークンを作成し、ユーザー ID と共にクレーム ベースの承認をトークンに追加し、それを WCF サービスに渡します。
現在、認証も承認もまったく行わない .NET Remoting サービス (.NET 1.1 タイムフレーム) を使用しています。
Forms Authチケットを作成するときに、現在持っている情報をユーザーに渡すだけの方法があるかもしれないので、それは少しやり過ぎかもしれません.現在のIPrincipleは、 Thread.CurrentIdentity のユーザー ID に設定された「name」プロパティ。
この時点で IsInRole("WhateverRole") も正しく機能すると確信していますが、これはすべて Web アプリケーション側にあります。.NET Remoting サービスには何も渡されません。
次の 2 つのクラスを見てみましょう。
AuthenticationService クラス
ServiceAuthorization クラス
私が望むものではないと思います。同様に、Michele Bustamante のLearning WCFを読みましたが、この特定のシナリオがカバーされているとは思えません。Windows Authenticationについて読んだとき、Windowsの内部セキュリティ状況に関連する内部 NTLM または Kerberos に関連付ける必要があると考え続けています。当社のユーザーは内部ユーザーではありません。それらは厳密に外部的です。
ユーザーが Forms Auth チケットを取得した場合、基本的に有効な IPrinciple を取得し、ロールを設定する必要があることがわかりました。
もしそうなら、これを別のマシンの WCF サービス設定に渡す方法はありますか? WCF clientCredentialType を windows に設定し、serviceAuthorization principalPermissionMode を "UseAspNetRoles" に設定した場合、これらは、サービス呼び出しを行うときに Web アプリケーションから WCF サービスにセキュリティ コンテキストで渡されますか?
これがどのように起こるかについて、私が見つけることができるものは何も明確ではありません。ありがとう。