2016-10-10 13 views
1

on-prem Active Directoryセットアップに対してC# ASP.NET Core (MVC 6)を使用しています。私は単にしかし、私はすなわち、Display Nameで取得するには、「ジョン・スミス」を必要とする私の「DOMAIN \ JSMITH」を与えるASP.NET CoreにActive Directoryの現在のユーザーの表示名を取得する方法は?

public MyModel(IHttpContextAccessor httpContextAccessor) 
{ 
    string userName = httpContextAccessor.HttpContext.User.Identity.Name; 
} 

により、現在のユーザーのusernameを得ることができます。これはどうすればいいですか?

更新:より掘削した後、これは、現在利用可能ではないようです。https://github.com/dotnet/corefx/issues/2089

+0

ADFSやアイデンティティ・サーバーなどのIDプロバイダを使用して、 (表示名を含む)。 –

答えて

4

Novell ldapライブラリは.NET Coreに対してportedになっています。表示名がattributeであるため、ライブラリを使用してクエリを呼び出すことができます(具体的なサンプルはありません)

-1

は、あなたはそれがsAMAccountNameの属性のことで、ユーザーを見つけて、それはのdisplayName属性のクエリ、Active Directoryへの接続を作成する必要があります。

var domain = httpContextAccessor.HttpContext.User.Identity.Name.Split('\\').First(); 
var accountName = httpContextAccessor.HttpContext.User.Identity.Name.Split('\\').Last(); 

using (var entry = new DirectoryEntry($"LDAP://{domain}")) 
{ 
    using (var searcher = new DirectorySearcher(entry)) 
    { 
     searcher.Filter = $"(sAMAccountName={name})"; 
     searcher.PropertiesToLoad.Add("displayName"); 
     var searchResult = searcher.FindOne(); 

     if (searchResult != null && searchResult.Properties.Contains("displayName")) 
     { 
      var displayName = searchResult.Properties["displayName"][0]; 
     } 
     else 
     { 
      // user not found 
     } 
    } 
} 
+0

これは 'ASP.NET Core(MVC 6)'互換ですか?私が間違ったパッケージを使用していない限り、 'DirectoryEntry'は' IDisposible'を実装していないので 'using'で動作しません。' ASP.NET Core'互換の 'DirectorySearcher'の参照を見つけることさえできません。 –

+0

申し訳ありませんが、完全にそれを逃した。プロジェクトにSystem.DirectoryServices dllをインクルードするだけでよいと思っています。しかし、それはどのように動作するのではありません。 http://stackoverflow.com/questions/36048910/problems-with-directory-services-and-account-management-in-asp-net-coreをご覧ください。これが役に立たない場合は、コードを別のプロセスに移動してプロセスを開始し、ファイル\プロセスのデフォルト出力リダイレクト\ IPCなどで結果を取得する方法があります(ASP.NETコアでサポートされているメソッド) – oldovets

+0

これらの名前空間はコアに存在しません。それでも。 – blowdart

関連する問題