DirectoryServices
を使用してユーザーを認証するイントラネットWebアプリケーション用のメソッドを作成する必要があります。これは、既定のドメインまたはユーザーが指定したドメインに対して行われます。ユーザがウェブサーバと同じドメイン内にあり、あるとき、最初のケースを使用することができますが"username"
と"password
の形で資格情報」または"domain\username"
と"password"
を与えるいずれかのことができるようになります私のログインでDirectoryServicesを使用したドメイン間認証
を形成。かなりstraightfoward私が使用するコードは次のとおりです。
string domain = "";
// Code to check if the username is in form of "domain\user" or "user"
string username = ParseUsername(username, out domain);
if(domain == "")
domain = defaultDomain;
PrincipalContext context = new PrincipalContext(ContextType.Domain, domain, username, password);
bool IsAuthenticated = context.ValidateCredentials(username, password)
私は別のドメインにアクセスしようとする場合に、コールをバインドするためにPrincipalContextコンストラクタにユーザー名とパスワードを渡すローカルドメインの場合
。そのコードは正常に動作します。しかし、ユーザー名で指定されている別のドメインと照合しようとすると、「サーバーに接続できませんでした」というエラーが表示されます。
ContextOptions.SimpleBind
やContextOptions.Negotiate
など別のContextOptions
を使ってみましたが、いつも同じ結果が出ているようです。
アプリケーションは、単一ドメインまたは複数ドメイン環境のいろいろな顧客に出荷されているので、これを実装する必要があります。 "リモート"ドメインの場合に指定する必要があるものはありますか?これはさまざまな環境で展開されるため、コードは柔軟にする必要があります。
おかげで
EDIT:私は、私はそれが同様に提供し、他の機能を利用するためにDirectoryServices.AccountManagement
とPrincipalContext
を使用してそれを行うことを好むことを、指摘しなければなりません。
私のテストでは、私のDevマシンは10.0.0。*のネットワーク上にあり、私がテストしている2番目のドメインは10.0.1。*です。私はルートとすべてを持っている、と私はsuccesfuly LDAPクライアントを使用して接続することができますので、私のasp.netアプリケーションを介してドメインに接続することはできません質問です。
セキュリティの制限は私の最初の推測です。しかし、このメソッドの古い実装では、古い.NET 2.0ライブラリのDirectoryEntryとDirectorySearcherを使用していました。その場合、コールをバインドするためにユーザー名とパスワードを渡す必要があり、これがダブルホップの問題を解決します。さて、私はまったく接続していないようです。 主な相違点は、より多用途になるように、ユーザーが所属するドメインを指定できるようにする必要があることです。 –
私が働いていた場所が新しいドメインに移行することに決めたとき、私は同様の問題を抱えていました。移行プロセスでは、両方のドメインをアクティブに保つ必要がありました。そこには信頼の問題があることがわかりましたが、解決策を決して決めることはできませんでした。代わりに、WinNTのアプローチで、ネットワーク全体でuserIDを検索し、そのオブジェクトを取得してから、必要に応じて操作を行いました。 WinNTが実行可能かどうかを確認するために、両方の方法のレイテンシチェックも行いましたが、それは適切な選択であることが判明しました。 – gizgok
@NikosSteiakakis解決策を見つけ出すには、ここに書いてください。 – gizgok