web-dev-qa-db-ja.com

WCFサーバー側からWindowsユーザー名を取得する

私はWebサービスとWCFにかなり慣れており、Windows統合認証を使用しています-サーバー側のインターフェイスでユーザー名を取得するにはどうすればよいですか?カスタムビヘイビア、またはおそらくWCFセッションで何かを実装することになっていると思いますか?手がかりはとても便利です。

20
Ana Betts

これは、WCFサービスの呼び出し元に関連付けられたWindowsIdentityを取得して使用する方法を示すサービスコードのスニペットです。

このコードは、構成でほとんどのデフォルトを受け入れていることを前提としています。名前付きパイプまたはネットTCPバインディングで問題なく動作するはずです。

p.Demand()は、ユーザーがpermissionGroup変数で指定されたWindowsグループに属しているかどうかを判別します。

private static void DemandManagerPermission()
{
    // Verify the use has authority to proceed
    string permissionGroup = ConfigurationManager.AppSettings["ManagerPermissionGroup"];
    if (string.IsNullOrEmpty(permissionGroup))
        throw new FaultException("Group permissions not set for access control.");

    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    var p = new PrincipalPermission(ServiceSecurityContext.Current.WindowsIdentity.Name, permissionGroup, true);
    p.Demand();

}
9
Mitch Baker

ServiceSecurityContext.Current.WindowsIdentityを見てみてください

49
Joe

WCFサービスの呼び出し元のユーザー名を取得するには:

var callerUserName = ServiceSecurityContext.Current.WindowsIdentity.Name;