This will be my first ASP.NET MVC application with forms authentication so I am trying to make sure I don’t miss anything. The scenario is this: Public / Secured Areas.
Within the private area it is even further limited to specific areas / user. These ‘Areas’ are defined by customizations to the base area that is customized per user group.
So for example a user could get to url /Area/Controller/Action. They would need to have permission to the secured area or they would be redirected to the sign-in view.
I have been reading about the AuthorizeAttribute but I am not sure how/where I should be doing these basic checks. My initial hunch would be to store a user object in the session after a successful sign-in with the user’s IP and details about what they have access to etc.
The authorization check for each secured controller call would verify that a valid user object exists in the session, the IPs still match up, and the user has access to the specific area. Is there any obvious holes to this setup?
Edit: Where/how do I implement these checks so that when a controller is tagged with [Authorize] it will perform those session object checks?
Any pointers or suggestions would be much appreciated. Thanks.
Well it looks like I went with a custom AuthorizeAttribute. It was actually very simple. Here is the code:
Then on my controllers I just have to put a
[Secure]attribute and it uses my function above anytime that controller is accessed. Pretty simple. I also made a[SecureByRole]attribute as well that does all the same stuff but checks for my custom role information as well. No need to for all that built in voodoo from the canned Membership 🙂