2011-10-31 77 views
3

如何從收到MSMQ消息發送者的WindowsIdentity?如何從收到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); 
} 
+2

請注意,SenderId很容易在消息中被欺騙,所以依賴它的安全性很差。 –

回答

0

我發現了一個解決方法,但不知道它是一個正確的解決方案。 相反WindowsPrincipal的我創建的GenericPrincipal並注入從Active Directory收到用戶的授權組。

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