Forbidden error on postback - asp.net

My application displays the following error when a postback occurs on the page:
Forbidden: You do not have permission to access / folder / teste.aspx on this server.
I can access the pages normally, the problem is when a postback occurs. For example, when a selectedindexchanged occurs, or a button is clicked, this error appears. But, when navigation is made by hyperlinks, the error does not occur.
This problem only appears when the application is accessed over the internet. The anonymous access was already enabled. I am using IIS6 and windows server 2003.

This is a permissions issue. You need to do two things: 1) update the Web.config of your project to impersonate, and 2) update the folder permissions to allow Read/Write access to the IUSR account on your machine. Here are the details:
First, Add this to your Web.config in the system.web node:
<identity impersonate="true"/>
Now, go to the root folder of your Web site in Windows Explorer, right click it, and click the 'Properties' option.
Then go to the Security tab. Click the 'Edit...' button next to the text that says 'To change permissions, click 'Edit.'
You will see a list of Groups or user names. Underneath that box, click 'Add...'
In the next window 'Select Users or Groups', click the 'Advanced' button on the bottom left.
Click the 'Find Now' button on the right. In the search results, look for an account called IUSR_MachineName (where machine name is the name of your computer). Select it by left clicking it, and then click 'OK'
Click 'OK' on the 'Select Users or Groups' window
In the list of groups or usernames, locate the IUSR account that you just added, and make sure that at the bottom the boxes for Modify, Read/Execute, List Folder Contents, and Read are all checked as 'Allow'. Note: You don't have to use Modify, but if you have any code that writes to the file system, you will need that checked.
Give that a shot.
For information's sake, the reason why it works from localhost, but not remote, is because the worker process is identifying you as an authenticated user. The instructions above are forcing IIS to use the 'Internet Guest Account' and then you are manually giving the permissions needed to that account.
One last final note, is that if you still have a problem, you might want to try giving the same access (using the steps above) to the 'Network' and 'Network Service' accounts. I don't think they matter (I'm pretty sure they were for Vista, but I could be wrong), but just in case.

Related

MVC, CSS, and 302 authentication Hell

Like most people with the same question, everything under my "Content" folder is currently being redirected to my login page (until I've been authorized). According to Dev HTTP Client, this is what I get when I try navigating directly to one of the style sheets under Content.
I've tried the following:
Allowing anonymous users to access a bunch of different folder via the web.config:
I've tried changing permissions on IIS. The folder of the website has full permissions, and too all of it's subfolders. I've even added Network Service user and DefaultAppPool user, and given them full permissions, also.
I've changed the Anonymous Authentication for the site to be Application Pool Identity
What am I missing?
Since you're setting Anonymous authentication to the ApplicationPool Identity you need to give the ApplicationPool Identity permission to that folder. To do this follow the next steps:
Go to the properties of your content directory
Select the "Security" tab
Click the "Edit" and then "Add" button
Click the "Locations" button and make sure you select your machine. (Not the Windows domain if the server belongs to one.)
Enter "IIS AppPool\nameofyourapppool"
Click the "Check Names" button and click "OK".
I apologize to everybody, but it would seem the answer was obvious (and my fault). In all the changes I made, I guess I had accidentally disabled the anonymous authentication on my Content folder.
So stupid...

"401 Unauthorized" on a directory

I assume this is an IIS error, as this doesn't happen if I run the project on my local machine.
I have my stylesheets at ~/Content/css
Any files in that directory won't load on the page, and when I navigate to them directly, I get a server error:
401 - Unauthorized: Access is denied due to invalid credentials.
You do not have permission to view this directory or page using the credentials that you supplied.
This only happens with that directory, I have no problem accessing any other files. Is there something I need to do in IIS7 to stop this?
Open IIS and select site that is causing 401
Select Authentication property in IIS Header
Select Anonymous Authentication
Right click on it, select Edit and choose Application pool identity
Restart site and it should work
It is likely that you do not have the IUSR_computername permission on that folder. I've just had a quick scan and it looks like you will find the information you need here.
If that isn't the case, are you prompted for your username and password by the browser? If so it may be that IIS is configured to use Integrated authentication only, as described here.
Open IIS
select site where you are facing the problem
Select Below
- Right click on Anonymous Authentication and click on edit and follow below
You do not have permision to view this directory or page using the credentials that you supplied.
This happened despite the fact the user is already authenticated via Active Directory.
There can be many causes to Access Denied error, but if you think you’ve already configured everything correctly from your web application, there might be a little detail that’s forgotten. Make sure you give the proper permission to Authenticated Users to access your web application directory.
Here are the steps I took to solve this issue.
Right-click on the directory where the web application is stored and select Properties and click on Security tab.
Click on Click on Edit…, then Add… button. Type in Authenticated Users in the Enter the object names to select., then Add button. Type in Authenticated Users in the Enter the object names to select.
Click OK and you should see Authenticated Users as one of the user names. Give proper permissions on the Permissions for Authenticated Users box on the lower end if they’re not checked already.
Click OK twice to close the dialog box. It should take effect immediately, but if you want to be sure, you can restart IIS for your web application.
Refresh your browser and it should display the web page now.
Hope this helps!
You need to check the folder permissions on your server and check that the account that you are using to run your application has access to that folder.
For me the Anonymous User access was fine at the server level, but varied at just one of my "virtual" folders.
Took me quite a bit of foundering about and then some help from a colleague to learn that IIS has "authentication" settings at the virtual folder level too - hopefully this helps someone else with my predicament.
In our case it was Windows-integrated authentication specified in the app's web.config
BUT the windows-auth module was not installed on the IIS machine at all.
Just adding another possible reason.
Another simple fix I found was to delete the local IIS site (from within IIS Manager) and then re-create the virtual directory from the "Properties" of your web project in Visual Studio.

IIS7 Permissions Overview - ApplicationPoolIdentity

We have recently upgraded to IIS7 as a core web server and I need an overview in terms of the permissions. Previously, when needing to write to the file system I would have give the AppPool user (Network Service) access to the directory or file.
In IIS7 I see, as default, the AppPool user is set to ApplicationPoolIdentity. So when I check the task-manager, I see that a user account called WebSite.example is running the IIS Process ('Website.example' being the name of the website in IIS)
However this user account doesn't exist if I try to use that to give permissions. So, how do I determine which user to give the permissions too?
See below for the problem in screen shot. Our website (www.silverchip.co.uk) runs on the username SilverChip.co.uk. However when I add permissions, this user doesn't exist!
See AppPool Image:
ApplicationPoolIdentity is actually the best practice to use in IIS7+. It is a dynamically created, unprivileged account. To add file system security for a particular application pool see IIS.net's "Application Pool Identities". The quick version:
If the application pool is named "DefaultAppPool" (just replace this text below if it is named differently)
Open Windows Explorer
Select a file or directory.
Right click the file and select "Properties"
Select the "Security" tab
Click the "Edit" and then "Add" button
Click the "Locations" button and make sure you select the local machine. (Not the Windows domain if the server belongs to one.)
Enter "IIS AppPool\DefaultAppPool" in the "Enter the object names to select:" text box. (Don't forget to change "DefaultAppPool" here to whatever you named your application pool.)
Click the "Check Names" button and click "OK".
Remember to use the server's local name, not the domain name, when resolving the name
IIS AppPool\DefaultAppPool
(just a reminder because this tripped me up for a bit):
Giving access to the IIS AppPool\YourAppPoolName user may be not enough with IIS default configurations.
In my case, I still had the error HTTP Error 401.3 - Unauthorized after adding the AppPool user and it was fixed only after adding permissions to the IUSR user.
This is necessary because, by default, Anonymous access is done using the IUSR. You can set another specific user, the Application Pool or continue using the IUSR, but don't forget to set the appropriate permissions.
Credits to this answer: HTTP Error 401.3 - Unauthorized
On Windows Server 2008(r2) you can't assign an application pool identity to a folder through Properties->Security. You can do it through an admin command prompt using the following though:
icacls "c:\yourdirectory" /t /grant "IIS AppPool\DefaultAppPool":(R)
Part A: Configuring your Application Pool
Suppose the Application Pool is named 'MyPool'
Go to 'Advanced Settings' of the Application Pool from the IIS Manager
Scroll down to 'Identity'. Trying to edit the value will bring up a dialog box. Select 'Built-In account' and under it, select 'ApplicationPoolIdentity'.
A few lines below 'Identity', you should find 'Load User Profile'. This value should be set to 'True'.
Part B: Configuring your website
Website Name: SiteName (just an example)
Physical Path: C:\Whatever (just an example)
Connect as... : Application User (pass-through authentication)
(The above settings can be found in 'Basic Settings' of the site in the IIS Manager)
After configuring the basic settings, look for the 'Authentication' configuration under 'IIS' in the main console of the site. Open it. You should see an option for 'Anonymous Authentication'. Make sure it is enabled. Then right click and 'Edit...' it. Select 'Application Pool Identity'.
Part C: Configuring your folder
The folder in question is C:\Whatever
Go to Properties - Sharing - Advanced Sharing - Permissions, and tick 'Share this folder'
In the same dialog box, you will find a button 'Permissions'. Click it.
A new dialog box will open. Click 'Add'.
A new dialog box 'Select Users or Groups' will open. Under 'From this location' make sure the name is the same as your local host computer. Then, under 'Enter the object names', type 'IIS AppPool\MyPool' and click 'Check Names' and then 'Ok'
Give full sharing permissions for 'MyPool' user. Apply it and close the folder properties
Open folder properties again. This time, go to Security - Advanced - Permission, and click Add. There will be an option 'Select a Principal' at the top, or some other option to choose a user. Click it.
The 'Select Users or Groups' dialog box will open again. Repeat step 4.
Give all or as many permissions you need to the 'MyPool' user.
Check 'Replace all child object permissions..." and Apply and close.
You should now be able to use the browse the website
Top Answer from Jon Adams
Here is how to implement this for the PowerShell folks
$IncommingPath = "F:\WebContent"
$Acl = Get-Acl $IncommingPath
$Ar = New-Object system.security.accesscontrol.filesystemaccessrule("IIS AppPool\DefaultAppPool","FullControl","ContainerInherit, ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $IncommingPath $Acl
Just to add to the confusion, the (Windows Explorer) Effective Permissions dialog doesn't work for these logins.
I have a site "Umbo4" using pass-through authentication, and looked at the user's Effective Permissions in the site root folder.
The Check Names test resolved the name "IIS AppPool\Umbo4", but the Effective Permissions shows that the user had no permissions at all on the folder (all checkboxes unchecked).
I then excluded this user from the folder explicitly, using the Explorer Security tab.
This resulted in the site failing with a HTTP 500.19 error, as expected. The Effective Permissions however looked exactly as before.
I fixed all my asp.net problems simply by creating a new user called IUSER with a password and added it the Network Service and User Groups. Then create all your virtual sites and applications set authentication to IUSER with its password.. set high level file access to include IUSER and BAM it fixed at least 3-4 issues including this one..
Dave

How to open localhost server on computer

I am making project on a asp.net(c#). I have completed my project and also i have make a software disc of my project. But when i am trying to access localhost.it show authentication required dialog box.which contain username and password.But i have not set any username and password. How can i overcome from this problem.
This might help. Especially the solution by nramsey34
In IIS, you can right click on either
the Website, or any virtual directory
under a website and bring up the
properties page. Under the 'Directory
Security' tab, click the Edit button
under 'Anonymous Access and
Authentication Control'. This will
bring up a window where you can
configure the authentication method
for your website. To stop it from
asking for a password, make sure that
Anonymous Access is selected. The
username should look like this -
IUSR_YOURPCNAME, and you should let
IIS control the password. You should
still be able to leave Windows
Authentication selected as well, but
to be certain it will not ask for a
password you can also uncheck that
box.
or this one, the solution by boyban
The Login Popup is due to a setting in
your IE Browser. In your IE Browser:
Go to the Top menu "Tools" -> "Internet Options".
Then choose the "Advanced" Tab.
Then Scroll all the way down and "Uncheck" the Checkbox corresponding
to "Enable Integrated Windows
Authentication".
Then Click the button that says "Apply" and then "OK".
Close the browser and in a new browser try http://localhost.

Problems with error: "Access to the path <path> is denied."

I was looking for the the trick to resolve that error (google, stackoverflow.com etc) and every nothing works.
I need to dynamically create an .aspx file via the asp.net application.
What I've done to try fix it:
1) In the folder's Properties -> Security, I've added IUSR_TONY and also IIS_IUSRS and allow them the Full control to the folder. Just to check if that will help. Nope, it won't.
2) in the IIS Manager, I tried to change the Application's Pool Defaults Identity (based on that) I checked all options, with no success
I don't know what to do more to fix it. Any ideas ?
Directions for IIS 6
You need to change the 'Home Directory' permissions with IIS Manager.
Open Properties on the website. Select the 'Home Directory' tab. Check the 'Write' checkbox to enable write permissions.
If you are set on doing this, I would suggest only enabling write on a particular directory and not the entire website. Changing the permissions for a single directory is the same as above except instead of selecting Properties for the entire website, choose Properties for the directory where you will be creating files.
Directions for IIS 7
Open Internet Information Systems (IIS) Manager
Expand the site you want to modify (hit the plus next to the name)
Right-click the directory where you would like to be able to write files and select Edit Permissions
Click on the Security tab
Click on Edit... under the group and users list
Select IIS_IUSRS from the "Groups or user names" list and add make sure the Allow checkbox is marked for Write.
I know this sounds a lot like what you did in 1) of your question but I'm guessing you may just edited the permissions through Windows Explorer rather than IIS Manager. Let me know what error(s) you see if the steps above still don't work for you.
I tested writing a file to disk using an example from aspalliance.com and it worked great when I granted IIS_IUSRS write permission to the output directory and stopped working when I removed the write permission.
Please state your operating system and version of IIS.
You need to grant access to the account that is running the app-pool in IIS. It is usually NT Authority\Network Service, so try granting full control to that account.
However, if you are using windows integrated security (and have impersonation=true) on your website, the user that must be granted access, is the user requesting the page.
Finally, I really want to discourage you from making a blog system that creates aspx files on the fly. It's simply not the way to do it.

Resources