<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Łukasz Sowa &#187; autoryzacja</title>
	<atom:link href="http://lukaszsowa.pl/tag/autoryzacja/feed/" rel="self" type="application/rss+xml" />
	<link>http://lukaszsowa.pl</link>
	<description>O programowaniu i nie tylko ;)</description>
	<lastBuildDate>Mon, 06 Feb 2012 12:09:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>ASP.NET MVC &#8211; autoryzacja użytkowników dla leniwych</title>
		<link>http://lukaszsowa.pl/2008/09/asp-net-mvc-autoryzacja-uzytkownikow-dla-leniwych/</link>
		<comments>http://lukaszsowa.pl/2008/09/asp-net-mvc-autoryzacja-uzytkownikow-dla-leniwych/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 00:27:00 +0000</pubDate>
		<dc:creator>Łukasz</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[autoryzacja]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">/post/2008/09/23/ASPNET-MVC-autoryzacja-uzytkownikow-dla-leniwych.aspx</guid>
		<description><![CDATA[Jeśli chcemy ograniczyć użytkownikom dostęp do różnych funkcjonalności naszej strony napisanej w ASP.NET MVC możemy skorzystać z przydatnych Membership Providerów (tak jak w przykładowej aplikacji MVC), możemy też zainteresować się czymś takim. Również kuszącą opcją jest skorzystanie z (mniej lub bardziej rozbudowanej) Forms Authentication znanej dobrze z &#8222;czystego&#8221; ASP.NET. Ja skusiłem się na tę ostatnią opcję, gdyż chciałem [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Jeśli chcemy ograniczyć użytkownikom dostęp do różnych funkcjonalności naszej strony napisanej w ASP.NET MVC możemy skorzystać z przydatnych Membership Providerów (tak jak w przykładowej aplikacji MVC), możemy też zainteresować się <a href="http://www.codeplex.com/MvcMembership/">czymś takim</a>. Również kuszącą opcją jest skorzystanie z (mniej lub bardziej rozbudowanej) Forms Authentication znanej dobrze z &#8222;czystego&#8221; ASP.NET. Ja skusiłem się na tę ostatnią opcję, gdyż chciałem uzyskać efekt minimalnym nakładem pracy.</p>
<p style="text-align: justify;">Jeśli prowadzicie blog, jedyne czego Wam potrzeba, to ograniczyć &#8222;anonimowym&#8221; dostęp do pewnych stron i akcji (jak np. dodawanie nowych notek), a dla siebie zatrzymać pełne uprawnienia. W tej sytuacji moje minimalistyczne rozwiązanie wydaje się być rozsądne :) Do rzeczy!</p>
<p style="text-align: justify;">Na początek, w głównym pliku <strong>Web.config </strong>naszej aplikacji musimy dodać:</p>
<p style="text-align: justify;"><strong><span style="font-size: 10pt;">&lt;authentication mode=&#8221;Forms /&gt;&#8221;</span></strong></p>
<p style="text-align: justify;">Aby nasza aplikacja wiedziała, czego od niej chcemy ;) Teraz należałoby stworzyć zwykły widok-formularz, w którym umieścimy pola <strong>login</strong> i <strong>hasło</strong> oraz odwołanie do odpowiedniej akcji, na przykład:</p>
<p style="text-align: justify;"><strong><span style="font-size: 10pt;"> &lt;form action=&#8221;/Admin/Authenticate/&#8221; method=&#8221;post&#8221;&gt; </span></strong></p>
<p style="text-align: justify;">To znaczy, że po wciśnięciu przycisku submit uruchomiona zostanie akcja podłączona pod route (to wszystko można ustawić w <strong>Global.asax</strong>) &#8222;http://naszaplikacja.com/Admin/Authenticate/&#8221; przekazując przy tym wartości pól Login i Password. Proste, prawda? Teraz należałoby obsłużyć żądanie w kontrolerze. Przykładowa akcja poniżej:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008000;">&#91;</span>AcceptVerbs<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;POST&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> ActionResult Authenticate<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> Login, <span style="color: #6666cc; font-weight: bold;">string</span> Password<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
<span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>ZaawansowaMetodaAutoryzacji<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
<span style="color: #0600FF; font-weight: bold;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">else</span>
<span style="color: #008000;">&#123;</span>
FormsAuthentication<span style="color: #008000;">.</span><span style="color: #0000FF;">SetAuthCookie</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Admin&quot;</span>, <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">return</span> Index<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Bardzo ważna jest tutaj linia:</p>
<p style="text-align: justify;"><strong><span style="font-size: 10pt;">FormsAuthentication.SetAuthCookie(&#8222;Admin&#8221;, false);</span></strong></p>
<p style="text-align: justify;">To ona spowoduje, że zostaniemy autoryzowani jako użytkownik &#8222;Admin&#8221;. Drugi parametr (&#8222;false&#8221;) działa jak znane pole &#8222;Remember me&#8221;, więcej do poczytania <a href="http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.setauthcookie.aspx">tutaj</a>. Fajnie, prawda?</p>
<p style="text-align: justify;">Teraz pozostaje nam już tylko oznaczyć odpowiednie akcje jako chronione. To ważne, <strong>chrońcie akcje a nie strony</strong>! Odpowiedź czemu zdaje się być oczywista. W dobrze napisanej aplikacji MVC każdy widok (każda strona) renderowana jest po przejściu przez kontroler, a więc przez odpowiednią akcję. Jeśli zabronimy &#8222;anonimowym&#8221; dostępu do odpowiednich akcji uzyskamy niemal 100% pewność, że nie obejrzą oni danej strony, ani nie wywołają nieprzeznaczonej dla nich metody (np. tworzącej nowy wpis na blogu) :) Jak zabronić dostępu użykownikowi do danej metody (akcji)? To bardzo proste. Wystarczy metodę oznaczyć atrybutem <strong>PrincipalPermission</strong>. Na przykład:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008000;">&#91;</span>PrincipalPermission<span style="color: #008000;">&#40;</span>SecurityAction<span style="color: #008000;">.</span><span style="color: #0000FF;">Demand</span>, Name <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Admin&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
<span style="color: #008000;">&#91;</span>AcceptVerbs<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;POST&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>
<span style="color: #0600FF; font-weight: bold;">public</span> RedirectToRouteResult AddEntry<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> Title, <span style="color: #6666cc; font-weight: bold;">string</span> Text<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
dataContext<span style="color: #008000;">.</span><span style="color: #0000FF;">AddEntry</span><span style="color: #008000;">&#40;</span>Title, Text<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">return</span> RedirectToAction<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Recent&quot;</span>, <span style="color: #666666;">&quot;Blog&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Dzięki temu metoda &#8211; wpis może być dodany tylko przez użytkownika &#8222;Admin&#8221;. W taki sposób oznaczamy wszystkie metody, do których chcemy dodać restrykcje. To tyle! Tym sprytnym sposobem nasza aplikacja jest chroniona w bardzo prosty sposób :)</p>
]]></content:encoded>
			<wfw:commentRss>http://lukaszsowa.pl/2008/09/asp-net-mvc-autoryzacja-uzytkownikow-dla-leniwych/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

