3

受信した msmq メッセージから送信者の WindowsIdentity を取得する方法は?

トランスポートとして msmq を使用し、操作の承認には承認規則プロバイダーを使用してセキュリティ アプリケーション ブロックを使用します。ルールは特定のユーザーではなく Active Directory ユーザーのグループに付与されるため、GenericPrincipal ではなく WindowsPrincipal が必要です。Message.SenderId は SecurityIdentifier に変換できますが、そこから WindowsIdentity を取得する方法が見つかりませんでした。

void AuthorizeOperation(Message message)
{
   // get sender windows principal
   WindowsPrincipal principal = ... ???

   // extract operation name from message body
   string operation = ... 

   AuthorizationFactory.GetAuthorizationProvider().Authorize(principal, operation);
}
4

1 に答える 1

0

回避策を見つけましたが、それが正しい解決策かどうかはわかりません。WindowsPrincipalの代わりに、GenericPrincipalを作成し、ActiveDirectoryから受け取ったユーザーの承認グループを挿入します。

var sid = new SecurityIdentifier(message.SenderId, 0);
var user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), IdentityType.Sid, sid);
var principal = new GenericPrincipal(
                   new GenericIdentity(user.SamAccountName),
                   user.GetAuthorizationGroups().Select(g => g.SamAccountName).ToArray());
bool authorized = AuthorizationFactory.GetAuthorizationProvider().Authorize(principal, operation);
于 2011-11-01T09:20:37.563 に答える