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

时间:2011-10-31 20:36:25

标签: c# security msmq windows-identity

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

我使用msmq作为传输,使用带有授权规则提供程序的安全应用程序块来进行操作授权。我需要WindowsPrincipal而不是GenericPrincipal,因为规则授予活动目录用户的组而不授予特定用户。 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);
}

1 个答案:

答案 0 :(得分:0)

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

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