Re: Design Question

From: Nicole Calinoiu (calinoiu)
Date: 12/23/04


Date: Thu, 23 Dec 2004 09:22:32 -0500

John,

Your biggest problem with this is likely to be determining the name of the
method. Unfortunately, the permissions attributes have no built-in
mechanism for directly retrieving a reference to the attribute target.
While it might be possible to retrieve such a reference using a combination
of stack walking and reflection at runtime, this would have potentially
undesirable performance consequences. To avoid these, you would need to
either hard-code the operation name (or some mapping value) into the
attribute definition (regardless of you're implementing with a custom
permission or a principal permission with custom principal) or use a tool
like XC# that will do the heavy lifting at compile time rather than at
runtime. Personally, I wouldn't opt for the hard-coding approach since
security holes could be opened by simply missing an edit during code
maintenance, but YMMV...

HTH,
Nicole

"John Lee" <johnl@newsgroup.nospam> wrote in message
news:uc3SvTH6EHA.260@TK2MSFTNGP10.phx.gbl...
> Thanks very much for the reply.
>
> But all role-based security information resides in AzMan store. All web
> services are configured as Windows authentication in IIS. So I will have
> to first get the Windows principal and then call AzRoles.dll's
> AccessCheck("method name") - each method name will be defined as an
> "operation" in AzMan store.
>
> Regards,
> John
>
> "Nicholas Paldino [.NET/C# MVP]" <mvp@spam.guard.caspershouse.com> wrote
> in message news:Or%230XtG6EHA.4004@tk2msftngp13.phx.gbl...
>> Or (and I think this is the easiest one of all), just use a custom
>> principal, and let Code Access Security take care of the rest.
>> Basically, you implement IPrincipal, and set it as the principal for the
>> thread that is doing the processing.
>>
>> Attached is a console application which demonstrates how to use the
>> PrincipalPermission attribute. Basically, there is an implementation of
>> IPrincipal and the current thread is set to use that principal (you will
>> have to do something different to have web requests use a certain
>> principal, but Im sure you can do it). Then, you just apply the right
>> attribute to your method, and the runtime will take care of the rest.
>>
>> Try changing the IsInRole implementation to return something else, or
>> the declaration of the PrincipalPermission attribute and the call to
>> DoSomething will fail.
>>
>> Hope this helps.
>>
>>
>> --
>> - Nicholas Paldino [.NET/C# MVP]
>> - mvp@spam.guard.caspershouse.com
>>
>>
>> "Nicole Calinoiu" <calinoiu REMOVETHIS AT gmail DOT com> wrote in message
>> news:O5xBXYG6EHA.1260@TK2MSFTNGP12.phx.gbl...
>>> Yes, but it's probably not as simple as you might have hoped. Here are
>>> the
>>> three main approaches:
>>>
>>> 1. Implement the check as a custom permission with a corresponding
>>> attribute
>>> (http://msdn.microsoft.com/library/en-us/cpguide/html/cpconcreatingyourowncodeaccesspermissions.asp).
>>> This may be your best bet since you can presumably control whether the
>>> attribute assembly is registered as a trusted assembly.
>>>
>>> 2. Place the actual method work in objects that inherit from
>>> System.ContextBoundObject. This might interfere with your planned
>>> object
>>> hierarchy, as well as introducing an otherwise unnecessary performance
>>> hit.
>>>
>>> 3. Use a tool like XC# (http://www.resolvecorp.com/Products.aspx) to
>>> generate inline code that corresponds to your custom attribute.
>>>
>>> If this truly is a security permission, #1 is probably the "cleanest"
>>> approach. Otherwise, #3 would probably offer the best compromise
>>> between
>>> design-time convenience and runtime performance.
>>>
>>> HTH,
>>> Nicole
>>>
>>>
>>>
>>> "John Lee" <johnl@newsgroup.nospam> wrote in message
>>> news:ejm4%237F6EHA.2180@TK2MSFTNGP10.phx.gbl...
>>>> Hi,
>>>>
>>>> If I want to check permission on each public method of a web service,
>>>> (assume the checking routine is ready to use and called AccessCheck) ,
>>>> one
>>>> way of doing it is to call this AccessCheck on top of each public
>>>> method,
>>>> I want to implement it in different way but seems missing something -
>>>>
>>>> I want to develop a custom attribute, let's say
>>>> SecurityCheckEnabledAttribute with only Yes/No parameter, then create a
>>>> base class for all web service classes, Is there any way to capture the
>>>> public method call from base class at runtime and then check if the
>>>> attribute is being applied and then check the permission?
>>>>
>>>> Thanks a lot!
>>>>
>>>> Regards,
>>>> John
>>>>
>>>
>>>
>>
>>
>>
>
>



Relevant Pages

  • Re: Design Question
    ... >> the declaration of the PrincipalPermission attribute and the call to ... Implement the check as a custom permission with a corresponding ... If I want to check permission on each public method of a web service, ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Declarative security
    ... (assuming the UserProfile class has a read-only UserName property): ... PrincipalPermission perm = new PrincipalPermission(this.UserName, ... > Consider my own Permission attribute and my own Permisssion class. ... > private void Update ...
    (microsoft.public.dotnet.security)
  • Re: linkdemand for principalpermission
    ... >I can't seem to understand what a linkdemand for a principalpermission ... And it looks that is happening at JIT phase not ... permission request attributes with the occasional exception of identity ...
    (microsoft.public.dotnet.security)
  • Re: PrincipalPermission trouble
    ... I agree that PrincipalPermission is not really a CAS Permission because it ... > so in other words - there is no performance optimization using LinkDemand ... This security check does not check ... >> But Demand I don't use for performance reasions. ...
    (microsoft.public.dotnet.security)
  • Re: Reg Role BAsed security..
    ... My question is the same security I can achive by using session. ... So what are the advantages of using rolebased security..over using session.. ... > lets you use the PrincipalPermission class as well as the ... > PrincipalPermission or PrincipalPermissionAttribute classes). ...
    (microsoft.public.dotnet.framework.aspnet.security)