56

Symbol wieloznaczny ? reprezentuje nieuwierzytelnionych użytkowników, natomiast * reprezentuje wszystkich użytkowników, uwierzytelnionych i nieuwierzytelnionych. Moja książka pokazuje poniższy przykład zezwolenia URL:Dlaczego <deny users = "?" /> uwzględnione w poniższym przykładzie?

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


ale nie powyższy kod ma taki sam skutek jak:

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

czy też autor m.in. <deny users="?" /> reguły dla rozumu ?

Odpowiedz

74

Program ASP.NET przyznaje dostęp z pliku konfiguracyjnego jako priorytet. W przypadku potencjalnego konfliktu pierwszeństwo ma pierwsze przyznanie grantu. Tak więc,

deny user="?" 

odmawia dostępu do anonimowego użytkownika. Następnie

allow users="dan,matthew" 
uzyskuje dostęp do tego użytkownika. Wreszcie odmawia dostępu wszystkim. To trzęsie się tak, jak wszyscy oprócz dan, Matthew odmawia się dostępu.

Edytowany w celu dodania: a jak wskazuje @Deviant, odmawianie dostępu do nieuwierzytelnionego jest bezcelowe, ponieważ ostatni wpis obejmuje także nieuwierzytelnione. Dobrym wpisu na blogu omawiając ten temat można znaleźć na stronie: Guru Sarkar's Blog

33

"W czasie wykonywania moduł autoryzacji wykonuje iteracje za pośrednictwem elementów allow i deny, zaczynając od najbardziej lokalnego pliku konfiguracji, aż moduł autoryzacji znajdzie pierwszą regułę dostępu, która pasuje do określonego konta użytkownika. lub odmawia dostępu do zasobu URL w zależności od tego, czy znaleziona pierwsza reguła dostępu to reguła zezwalająca, czy odmowa. Domyślna zasada autoryzacji to: domyślnie dostęp jest dozwolony, chyba że skonfigurowano inaczej. "

Artykuł na MSDN

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

W swojej 1st przykład zaprzeczyć * nie wpłynie dan, Matthew, ponieważ zostały one już dopuszczone przez poprzedniego panowania.

Zgodnie z dokumentami, tutaj nie ma różnicy w zestawach twoich 2 zestawów.

3

Przykład 1 dotyczy aplikacji asp.net korzystających z uwierzytelniania formularzy. Jest to powszechna praktyka w przypadku aplikacji internetowych, ponieważ użytkownik jest nieuwierzytelniony, dopóki nie zostanie uwierzytelniony w stosunku do niektórych modułów zabezpieczeń.

Przykład 2 jest dla aplikacji asp.net przy użyciu uwierzytelniania systemu Windows. Uwierzytelnianie systemu Windows korzysta z usługi Active Directory do uwierzytelniania użytkowników. To uniemożliwi dostęp do twojej aplikacji. Używam tej funkcji w aplikacjach intranetowych.

Powiązane problemy