Warum ist <verweigern Benutzer = "?" /> im folgenden Beispiel enthalten?

77

Der ?Platzhalter steht für nicht authentifizierte Benutzer, während *er alle authentifizierten und nicht authentifizierten Benutzer darstellt. Mein Buch zeigt das folgende Beispiel für die URL-Autorisierung:

<authorization>
  <deny users="?" />
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>


Aber hat der obige Code nicht den gleichen Effekt wie:

<authorization>
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>

oder hat der Autor <deny users="?" />aus einem bestimmten Grund auch eine Regel aufgenommen?

SourceC
quelle

Antworten:

93

ASP.NET gewährt vorrangig Zugriff aus der Konfigurationsdatei. Im Falle eines möglichen Konflikts hat der erste Zuschuss Vorrang. Damit,

deny user="?" 

verweigert dem anonymen Benutzer den Zugriff. Dann

allow users="dan,matthew" 

gewährt diesem Benutzer Zugriff. Schließlich verweigert es jedem den Zugang. Dies erschüttert, da allen außer Dan, Matthew der Zugang verweigert wird.

Bearbeitet, um hinzuzufügen: und wie @Deviant hervorhebt, ist es sinnlos, den Zugriff auf nicht authentifizierte zu verweigern, da der letzte Eintrag auch nicht authentifizierte enthält. Einen guten Blogeintrag zu diesem Thema finden Sie unter: Guru Sarkars Blog

Cyberherbalist
quelle
41

"Zur Laufzeit durchläuft das Autorisierungsmodul die Elemente" Zulassen "und" Verweigern ", beginnend mit der lokalsten Konfigurationsdatei, bis das Autorisierungsmodul die erste Zugriffsregel findet, die zu einem bestimmten Benutzerkonto passt. Anschließend gewährt oder verweigert das Autorisierungsmodul den Zugriff auf Eine URL-Ressource, abhängig davon, ob die erste gefundene Zugriffsregel eine Zulassungs- oder eine Verweigerungsregel ist. Die Standardautorisierungsregel lautet. Daher ist der Zugriff standardmäßig zulässig, sofern nicht anders konfiguriert. "

Artikel bei MSDN

deny = * means deny everyone
deny = ? means deny unauthenticated users

In Ihrem ersten Beispiel wirkt sich Verweigern * nicht auf Dan, Matthew aus, da sie bereits nach der vorhergehenden Regel zulässig waren.

Laut den Dokumenten gibt es hier keinen Unterschied in Ihren 2 Regelsätzen.

Chad Grant
quelle
4

Beispiel 1 ist für asp.net-Anwendungen mit Formularauthentifizierung. Dies ist bei Internetanwendungen üblich, da der Benutzer erst dann authentifiziert wird, wenn eine Authentifizierung gegen ein Sicherheitsmodul erfolgt.

Beispiel 2 ist für eine asp.net-Anwendung mit Windows-Authentifizierung. Die Windows-Authentifizierung verwendet Active Directory zur Authentifizierung von Benutzern. Dadurch wird der Zugriff auf Ihre Anwendung verhindert. Ich verwende diese Funktion in Intranetanwendungen.

Michael Kniskern
quelle
-1

Siehe diese beiden Links:

Element für Autorisierung verweigern (ASP.NET-Einstellungsschema) http://msdn.microsoft.com/en-us/library/vstudio/8aeskccd%28v=vs.100%29.aspx

Element für die Autorisierung zulassen (ASP.NET-Einstellungsschema): http://msdn.microsoft.com/en-us/library/vstudio/acsd09b0%28v=vs.100%29.aspx

HERR
quelle
4
Können Sie erklären, wie dies die Frage beantwortet? Es wird erwartet, dass die Antworten für sich allein stehen und Links als Referenz dienen.
Edward