<?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>auth0 &#8211; Strona Szoguna</title>
	<atom:link href="https://szogun1987.pl/show/tag/auth0/feed/" rel="self" type="application/rss+xml" />
	<link>https://szogun1987.pl</link>
	<description>Jeszcze wstawię tutaj jakiś głęboki cytat</description>
	<lastBuildDate>Wed, 26 Jun 2019 11:34:57 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.2</generator>
	<item>
		<title>Auth0 &#8211; Aplikacja do odpalania rakiet &#8211; backend</title>
		<link>https://szogun1987.pl/show/auth0-aplikacja-do-odpalania-rakiet-backend/430/</link>
					<comments>https://szogun1987.pl/show/auth0-aplikacja-do-odpalania-rakiet-backend/430/#comments</comments>
		
		<dc:creator><![CDATA[szogun1987]]></dc:creator>
		<pubDate>Sat, 22 Jun 2019 03:42:46 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[auth0]]></category>
		<category><![CDATA[C Sharp]]></category>
		<guid isPermaLink="false">https://szogun1987.pl/?p=430</guid>

					<description><![CDATA[Zabezpieczenie backendu przed nieautoryzowanym dostępem jest najważniejszym elementem kontroli dostępu. Weryfikacja ograniczona do strony klienta działa jak folia aluminiowa na obrazku: W tym artykule pokażę jak utworzyłem prostą aplikację backendową, która wymaga autoryzacji z wykorzystaniem Auth0. Aplikacja jest stworzona w technologii .Net core, zanim zacząłem nad nią pracę miałem już zainstalowany pakiet .Net Core SDK, &#8230; <p class="link-more"><a href="https://szogun1987.pl/show/auth0-aplikacja-do-odpalania-rakiet-backend/430/" class="more-link">Czytaj dalej<span class="screen-reader-text"> Auth0 &#8211; Aplikacja do odpalania rakiet &#8211; backend</span></a></p>]]></description>
										<content:encoded><![CDATA[
<p>Zabezpieczenie backendu przed nieautoryzowanym dostępem jest najważniejszym elementem kontroli dostępu. Weryfikacja ograniczona do strony klienta działa jak folia aluminiowa na obrazku:  </p>



<figure class="wp-block-image"><img decoding="async" src="https://external-preview.redd.it/sEGqsvUeXFmGdKccMwoQBZbch_t_aw1ImQCaj0J8jjM.jpg?auto=webp&amp;s=ce1ddd781e0b2fa92d6f13211bf9826b780f453b" alt=""/></figure>



<p><em> </em></p>



<span id="more-430"></span>



<p>W tym artykule pokażę jak utworzyłem prostą aplikację backendową, która wymaga autoryzacji z wykorzystaniem Auth0. </p>



<p>Aplikacja jest stworzona w technologii .Net core, zanim zacząłem nad nią pracę miałem już zainstalowany pakiet .Net Core SDK, aby je zainstalować należy wejść na stronę : <a href="https://dotnet.microsoft.com/download">https://dotnet.microsoft.com/download</a> i wybrać swój system operacyjny i podążać za instrukcjami.</p>



<p>Praca nad aplikacją jest znacznie prostsza z użyciem Visual Studio, ewentualnie Visual Studio Code albo JetBrains Rider, ich instalacja nie jest jednak konieczna.</p>



<p>Tworzenie aplikacji rozpocząłem od wpisania w linię poleceń:</p>



<pre class="prettyprint">dotnet new web --name SzogunUI.RocketService</pre>



<p>Polecenie to tworzy szkielet nowej aplikacji web o nazwie SzogunUI.RocketService</p>



<p>Następnie otworzyłem plik SzogunUI.RocketService\StartUp.cs i zmodyfikowałem metody Configure oraz ConfigureServices</p>



<pre class="prettyprint lang-cs">public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseMvc();
}</pre>



<p>Linijki services.AddMvc() oraz app.UseMvc() sprawiają, że aplikacja wspiera wzorzec Mvc, czyli jest podzielona na 3 elementy: Model &#8211; zawierający struktury danych wykorzystywane do komunikacji między aplikacją a światem zewnętrznym, Widok (View) &#8211; w tej aplikacji nie wykorzystywany, oraz logikę aplikacji w kontrolerach (Controller). </p>



<p>Warunek sprawdzający env.IsDevelopment() sprawia, że w trakcie prac nad projektem aplikacja będzie zwracała dużą ilość szczegółów technicznych dotyczących przyczyny błędu.</p>



<p>Do katalogu  SzogunUI.RocketService dodałem katalog Models, który zawiera Modele danych. Pierwszym z nich jest plik MissileType.cs zawierający następujący kod:</p>



<pre class="prettyprint lang-cs">namespace SzogunUI.RocketService.Models
{
    public enum MissileType
    {
        Bb,
        Parabelum,
        Cruise,
        TsarBomba
    }
}</pre>



<p>Jest to definicja typu wyliczeniowego (enum) zawierającego wszystkie typy pocisków jakie mogą być wysłane przez serwis. </p>



<p>Dodałem też klasę MissileSpec.cs zawierający klasę MissileSpec, opisującą ilość i typ pocisków wysyłanych przez użytkownika.</p>



<pre class="prettyprint lang-cs">namespace SzogunUI.RocketService.Models
{
    public class MissileSpec
    {
        public MissileType Type { get; set; }
        public int Amount { get; set; }
    }
}</pre>



<p>Następnie w katalogu SzogunUI.RocketLauncher utworzyłem katalog Controllers, a w tym katalogu umieściłem plik IndexController.cs zawierający następujący kod:</p>



<pre class="prettyprint">using Microsoft.AspNetCore.Mvc;
using SzogunUI.RocketService.Models;
namespace SzogunUI.RocketService.Controllers
{
    public class IndexController : Controller
    {
        [HttpGet]
        [Route("missile-types")]
        public IActionResult GetMissileTypes()
        {
            return Ok(new[]
            {
                MissileType.Bb,
                MissileType.Parabelum,
                MissileType.Cruise,
                MissileType.TsarBomba
            });
        }
        
        [HttpPut]
        [Route("locations/{latitude}/{longitude}")]
        public IActionResult PutMissilesToLocation(
            [FromRoute]double latitude, 
            [FromRoute]double longitude, 
            MissileSpec spec)
        {
            return Ok();
        }
    }
}</pre>



<p>Zawiera on klasę IndexController będącą pierwszym kontrolerem w naszej aplikacji. Klasa dziedziczy po klasie Controller, nie jest to wymagane, ale ułatwia pracę. Zawiera ona dwie metody:</p>



<ul><li>GetMissileTypes &#8211; zwracającą tablicę dostępnych typów pocisków</li><li>PutMissilesToLocation &#8211; pobierającą współrzędne geograficzne i specyfikację pocisków &#8211; odpowiedzialną za wysłanie pocisków w określoną lokalizację. Metodę pozostawiam pustą</li></ul>



<p>Kod zawiera także inne elementy: Atrybuty Route definiują ścieżkę pod jaką dana metoda będzie dostępna np. Route(&#8222;missile-type&#8221;) mówi, że akcja będzie dostępna pod adresem [adres-serwera]/missile-types np. https://localhost:5001/missile-types. Atrybut HttpGet oznacza, że metoda służy do pobierania danych i że można ją wywołać po prostu wpisując w przeglądarkę odpowiedni adres, istnieją atrybuty HttpPut, HttpPost i HttpDelete, które oznaczają że metoda wymaga zapytania put, post albo delete, ręczne wywołanie metod oznaczonych tymi atrybutami wymaga narzędzi typu Postman, curl czy wtyczka do chrome Advanced REST Client. Serwis będzie wywoływany przez aplikacje klienckie, a nie bezpośrednio przez użytkowników, nie musisz się więc przejmować tym utrudnieniem.</p>



<p>Działanie atrybutu FromRoute na parametrze metody najłatwiej wyjaśnić na przypadku metody PutMissilesToLocation. Ścieżka (atrybut Route) zawiera fragmenty {latitude} i {longitude} odpowiednie parametry metody posiadają Atrybut FromRoute oznacza to , że Mvc spróbuje dopasować fragment ścieżki i przekazać go jako parametr metody np. użycie ścieżki /locations/52.20/21.00 spowoduje wysłanie pocisków w kierunku Mokotowa.</p>



<p>Ostatnim elementem użytym w tym fragmencie kodu jest metoda Ok, do której można przekazać parametr. Generuje ona odpowiedź mówiącą, że obsługa wywołania się udała, a jej opcjonalny parametr jest zamieniany w zwracany tekst. Istnieją inne metody takie jak BadRequest albo UnAuthorized, mówiące, że nie udało się przetworzyć wywołania i dające aplikacji klienckiej pewne wskazówki o przyczynie tego problemu.</p>



<p>Na tym etapie po uruchomieniu aplikacji da się z nią rozmawiać po http, np .wpisując w przeglądarkę <a href="https://localhost:5001/missile-types">https://localhost:5001/missile-types</a>. Niestety zamiast nazw typów pocisków aplikacja zwraca:&nbsp;[0,1,2,3]. Aby to naprawić Należy do metody ConfiureServices w klasie Startup dodać wywołanie metody AddJsonOptions:</p>



<pre class="prettyprint">services
    .AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.Converters.Add(new StringEnumConverter()));</pre>



<p>Zaś w sekcji using dodać wpis</p>



<pre class="prettyprint">using Newtonsoft.Json.Converters;</pre>



<p>Teraz metoda zwraca już poprawny wynik.</p>


]]></content:encoded>
					
					<wfw:commentRss>https://szogun1987.pl/show/auth0-aplikacja-do-odpalania-rakiet-backend/430/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Auth-0 aplikacja do odpalania rakiet &#8211; frontend</title>
		<link>https://szogun1987.pl/show/auth-0-aplikacja-do-odpalania-rakiet-frontend/435/</link>
					<comments>https://szogun1987.pl/show/auth-0-aplikacja-do-odpalania-rakiet-frontend/435/#comments</comments>
		
		<dc:creator><![CDATA[szogun1987]]></dc:creator>
		<pubDate>Sat, 22 Jun 2019 03:42:43 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[aurelia]]></category>
		<category><![CDATA[auth0]]></category>
		<guid isPermaLink="false">https://szogun1987.pl/?p=435</guid>

					<description><![CDATA[Interfejs użytkownika jest ważnym elementem bzpieczeństwa aplikacji, musi on być łatwy w obsłudze, jednocześnie nie może on być wektorem ataku, np. nie powinien używać mechanizmów mogących ujawnić login i hasło podmiotom trzecim. Dostawcy tożsamości, w tym Auth0, upraszają to zadanie, dając swoim klientom gotowe ekrany logowania i rejestracji, które sprawiają, że aplikacja kliencka nie ma &#8230; <p class="link-more"><a href="https://szogun1987.pl/show/auth-0-aplikacja-do-odpalania-rakiet-frontend/435/" class="more-link">Czytaj dalej<span class="screen-reader-text"> Auth-0 aplikacja do odpalania rakiet &#8211; frontend</span></a></p>]]></description>
										<content:encoded><![CDATA[
<p>Interfejs użytkownika jest ważnym elementem bzpieczeństwa aplikacji, musi on być łatwy w obsłudze, jednocześnie nie może on być wektorem ataku, np. nie powinien używać mechanizmów mogących ujawnić login i hasło podmiotom trzecim.</p>



<p>Dostawcy tożsamości, w tym Auth0, upraszają to zadanie, dając swoim klientom gotowe ekrany logowania i rejestracji, które sprawiają, że aplikacja kliencka nie ma dostępu do loginu i hasła, a co za tym idzie nie może go ujawnić.</p>



<p>Klientem, którego proces tworzenia opiszę jest aplikacja SPA (single page application), napisana z wykorzystaniem frameworka aurelia w języku typescript,  <br>ale wybór frameworka i języka nie ma szczególnego znaczenia. </p>



<span id="more-435"></span>



<p class="has-text-color has-background has-very-light-gray-color has-vivid-red-background-color">Do testowania aplikacji tworzonej w ramach tego artykułu konieczne jest uruchomienie aplikacji backend. Opis tworzenia tej aplikacji znajduje się w <a href="https://szogun1987.pl/">tym artykule</a></p>



<h2 class="wp-block-heading"> Szkielet aplikacji </h2>



<p>Przed rozpoczęciem pracy miałem już zainstalowany NodeJs, można go pobrać <a href="https://nodejs.org/en/download/">tutaj</a>. Pracę rozpocząłem od zainstalowania narzędzia aurelia-cli, które ułatwia tworzenie aplikacji opartej na tym frameworku.</p>



<pre class="prettyprint">npm install --global aurelia-cli</pre>



<p> Utworzenie nowego projektu opartego o Webpack i Typescript sprowadza się do wpisania komendy:</p>



<pre class="prettyprint">au new
Please enter a name for your new project below.<br>rocket-launcher
Would you like to use the default setup or customize your choices?
1. Default TypeScript
Would you like to create this project?
1. Yes (Default)
Would you like to install the project dependencies?
1. Yes (Default)</pre>



<p>

Następnie zmieniłem nazwę nowo-utworzonego katalogu rocket-launcher na src.

</p>



<p>Aby uruchomić aplikację wystarczy wpisać&nbsp; </p>



<pre class="prettyprint">au run</pre>



<p>

I otworzyć w przeglądarce stronę http://localhost:8080

</p>


]]></content:encoded>
					
					<wfw:commentRss>https://szogun1987.pl/show/auth-0-aplikacja-do-odpalania-rakiet-frontend/435/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Auth0 &#8211; Delegowanie zarządzania tożsamością</title>
		<link>https://szogun1987.pl/show/auth0-delegowanie-zarzadzania-tozsamoscia/339/</link>
					<comments>https://szogun1987.pl/show/auth0-delegowanie-zarzadzania-tozsamoscia/339/#comments</comments>
		
		<dc:creator><![CDATA[szogun1987]]></dc:creator>
		<pubDate>Tue, 29 Jan 2019 21:07:35 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[auth0]]></category>
		<category><![CDATA[bezpieczeństwo]]></category>
		<guid isPermaLink="false">https://szogun1987.pl/?p=339</guid>

					<description><![CDATA[Zarządzanie tożsamością użytkowników i prawami dostępu jest podstawą bezpieczeństwa większości aplikacji. We wszystkich aplikacjach daje się wykryć powtarzalne wzorce rozwiązań, pozwalające określić czy użytkownik rzeczywiście jest tym za kogo się podaje. Standardem jest opieranie się o login i hasło, często wzmocnione innymi mechanizmami takimi jak kody jednorazowe wysyłane sms-em. Jednocześnie jest to zagadnienie zasobochłonne, o &#8230; <p class="link-more"><a href="https://szogun1987.pl/show/auth0-delegowanie-zarzadzania-tozsamoscia/339/" class="more-link">Czytaj dalej<span class="screen-reader-text"> Auth0 &#8211; Delegowanie zarządzania tożsamością</span></a></p>]]></description>
										<content:encoded><![CDATA[
<p>Zarządzanie tożsamością użytkowników i prawami dostępu jest podstawą bezpieczeństwa większości aplikacji. We wszystkich aplikacjach daje się wykryć powtarzalne wzorce rozwiązań, pozwalające określić czy użytkownik rzeczywiście jest tym za kogo się podaje. Standardem jest opieranie się o login i hasło, często wzmocnione innymi mechanizmami takimi jak kody jednorazowe wysyłane sms-em.</p>



<p>Jednocześnie jest to zagadnienie zasobochłonne, o ile sama implementacja ekranu logowania i rejestracji użytkownika zgodnie z bieżącymi standardami jest dość szybka: zajmuje od kilku godzin do kilkunastu dni, to co jakiś czas okazuje się, że stare praktyki przestają gwarantować bezpieczeństwo, oraz pojawiają się nowe rozwiązania adresujące problemy występujące w starych. Wymaga to ciągłego śledzenia informacji związanych z szeroko rozumianym bezpieczeństwem i adaptacji swojego systemu.</p>



<p>Niestety bezpieczeństwo w oprogramowaniu nie zarabia, z tego powodu w wielu systemach jest traktowane po macoszemu, menadżerowie znacznie chętniej poświęcą miesiąc na zbudowanie nowych ścieżek sprzedażowych niż tydzień, na zmianę sposobu szyfrowania haseł.</p>



<p>Powszechność i złożoność problemu oraz brak biznesowych przesłanek do inwestycji w zabezpieczenie aplikacji czyni ten aspekt idealnym kandydatem do wydelegowania do innej organizacji. </p>



<p><a href="https://auth0.com/">Auth0</a>&nbsp;jest jednym z dostawców, na których warto zwrócić uwagę, w tym artykule postram się przybliżyć kilka aspektów związanych z integracją z tym dostawcą.</p>



<span id="more-339"></span>



<h2 class="wp-block-heading">Aplikacja do odpalania rakiet</h2>



<p>Dla lepszego zobrazowania procesu integracji z Auth0 przygotowałem aplikację do odpalania rakiet, podobnej do tej znanej z komiksu xkcd:</p>



<figure class="wp-block-image"><img decoding="async" src="https://imgs.xkcd.com/comics/the_important_field.png" alt=""/><figcaption><a href="https://xkcd.com/970/">https://xkcd.com/970/</a></figcaption></figure>



<p>Aplikacja ma następującą architekturę</p>



<figure class="wp-block-image"><img decoding="async" fetchpriority="high" width="784" height="563" src="https://szogun1987.azureedge.net/wp-content/Rocket-service.png" alt="" class="wp-image-344"/></figure>



<p>Backend &#8211; RocketService jest usługą uruchomioną w chmurze, posiadającą 2 punkty końcowe: jeden pozwalający pobrać listę dostępnych typów pocisków, drugi pozwalający wysłać określoną ilość pocisków, danego typy, pod wskazaną lokalizację. Oczywiście tylko zalogowani użytkownicy powinni mieć możliwość wykonania tych operacji.</p>



<p>Usługa jest wywoływana przez dwie aplikacje: Aplikację napisaną w Xamarin Forms&#8217;ach przeznaczoną na telefony Android i iOS oraz SPA przeznaczoną dla wszystkich innych urządzeń.</p>



<p>Obie aplikacje kontaktują się z serwisem Auth0, aby przeprowadzić użytkownika przez proces rejestracji i logowania oraz pozyskać dane, które pozwalają na kontakt z backendem.</p>



<h2 class="wp-block-heading">Rejestracja tenanta</h2>



<p>Aby aplikacja mogła korzystać z auth0 musiałem ją zarejestrować, zacząłem od wejścia na stronę <a href="https://auth0.com">auth0.com</a> i kliknięcia w przycisk &#8222;Sign Up&#8221; w prawym górnym rogu. Na wyświetlonym ekranie wybrałem sposób w jaki chciałbym zarejestrować konto w serwisie. Auth0 udostępnia wykorzystanie podanie loginu i hasła ewentualnie skorzystanie z któregoś najpopularniejszych dostawców tożsamości: Google, Microsoft czy Github, ja wybrałem konto Microsoft, ale wybór nie ma większego znaczenia. Po zakończeniu rejestracji zostałem przekierowany do ekranu rejestracji tenanta (słowo lokator mi jakoś mi nie leży) czyli mojego systemu/organizacji.</p>



<figure class="wp-block-image"><img decoding="async" width="1024" height="666" src="https://szogun1987.azureedge.net/wp-content/Auth0-step1-1024x666.png" alt="" class="wp-image-346"/></figure>



<p>Na tym ekranie wprowadziłem nazwę, wybrałem Unię europejską jako miejsce przechowywania danych <strong>#boRODO</strong>, i nie wyraziłem zgody się na otrzymywanie wiadomości email i kliknąłem &#8222;Next&#8221;.</p>



<p>Drugi krok służy dopasowaniu wyglądu panelu administracyjnego do potrzeb i wiedzy użytkownika. Ja uzupełniłem go w sposób widoczny poniżej.</p>



<figure class="wp-block-image"><img decoding="async" width="630" height="521" src="https://szogun1987.azureedge.net/wp-content/Auth0-step2.png" alt="" class="wp-image-347"/></figure>



<p>W tym momencie nastąpiło przekierowanie do Panelu sterowania zwanego też daszbordem. Po jego lewej stronie znajduje się menu dające dostęp do bardzo szerokiego zakresu funkcji i ustawień.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" loading="lazy" width="220" height="706" src="https://szogun1987.pl/wp-content/uploads/2019/01/Auth0-side-menu.png" alt="" class="wp-image-499"/></figure></div>



<ul><li>APIs &#8211; zarządzanie aplikacjami &#8211; backend</li><li>Applications &#8211; zarządzanie aplikacjami klienckimi (front-end, desktop, mobile, IoT) za pomocą których można kontaktować się z aplikacjami -backend</li><li>Connections i SSO integrations &#8211; pozwalają skonfigurować sposoby weryfikacji tożsamości użytkownika, domyślnie włączony jest jedna opcja &#8222;Database&#8221; w sekcji connections. Sprawia ona że dostępne jest logowanie z wykorzystaniem loginu i hasła. Można tam jednak uruchomić całą masę integracji od facebooka i google przez firmowe subskrypcje Office 365 i Slack&#8217;a aż po serwery LDAP.</li><li>Users &#8211; przegląd aktywnych (i nieaktywnych) kont użytkowników</li><li>Multi-factor auth &#8211; autoryzacja wieloskładnikowa &#8211; np. jednorazowe kody SMS</li><li>Emails &#8211; szablony automatycznych wiadomości email wysyłanych do użytkowników </li><li>Anomaly detection &#8211; raporty o &#8222;dziwnych&#8221; zachowaniach użytkowników, mogących świadczyć o próbie ataku na określone konta albo cały serwis.</li></ul>



<p>Opis tworzenia poszczególnych aplikacji umieściłem w osobnych artykułach:</p>



<ul><li> <a href="https://szogun1987.pl/show/auth0-aplikacja-do-odpalania-rakiet-backend/430/">Backend</a></li><li><a href="https://szogun1987.pl/show/auth-0-aplikacja-do-odpalania-rakiet-frontend/435/">Frontend</a></li></ul>



<p>

Artykuły w przygotowaniu, zapisz się na newsletter aby otrzymać powiadomienie gdy tylko się ukażą

</p>


                <div class="ml-form-embed"
                     data-account="1263762:z6l6r3u4j3"
                     data-form="1042960:p2f9q5">
                </div>
            


]]></content:encoded>
					
					<wfw:commentRss>https://szogun1987.pl/show/auth0-delegowanie-zarzadzania-tozsamoscia/339/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
