如何从收到的msmq消息中获取发件人的WindowsIdentity

本文关键字:获取 WindowsIdentity msmq 消息 | 更新日期: 2023-09-27 18:12:49

如何从收到的msmq消息中获取发送方的WindowsIdentity ?

我使用msmq作为传输和安全应用程序块与授权规则提供者的操作授权。我需要windowsprinprincipal而不是GenericPrincipal,因为授予活动目录用户组而不是特定用户的规则。消息。SenderId可以转换为安全标识符,但我没有找到如何从它获得WindowsIdentity。

void AuthorizeOperation(Message message)
{
   // get sender windows principal
   WindowsPrincipal principal = ... ???
   // extract operation name from message body
   string operation = ... 
   AuthorizationFactory.GetAuthorizationProvider().Authorize(principal, operation);
}

如何从收到的msmq消息中获取发件人的WindowsIdentity

我找到了一个变通方法,但不确定这是一个正确的解决方案。我创建了一个GenericPrincipal,并注入从活动目录接收到的用户授权组,而不是windowsprinprincipal。

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);