FunnyBean / IntraWeb

0 stars 0 forks source link

Authentifikácia a autorizácia - server #13

Open Burgyn opened 8 years ago

Burgyn commented 8 years ago

UI pre prihlasovanie sa rieši v issue #21

Dohodli sme sa, že bez prihlásenia je celá aplikácia neprístupná

ASP.NET 5 Authorization Zaujímavý článok

Burgyn commented 8 years ago

Ahojte chalani. Na poslednom stretku ste spomínali, že máte v pláne použiť vlastné tabuľky pre správu používateľov a rolí. Ak sa teda nerozhodnete používať tie defaultne (som jednoznačne za :-) ) tak prosím zmente aby náš ApplicationDbContext nededil z IdentityDbContext a zrušte aj príslušnú migráciu. Pretože to robí len problémy. Nahlásil som im to, ale ešte nereagovali. IdentityDbContext Migration problem

Dik.

motycak commented 8 years ago

Majo perfektný príklad si pridal: http://chsakell.com/2016/01/01/cross-platform-single-page-applications-with-asp-net-5-angular-2-typescript/ ...týmto smerom pojdeme ako je tu urobená autehenifikácia...

majco333 commented 8 years ago

To pridal Miňo, ja som iba zaktualizoval link ;-)

motycak commented 8 years ago

Chalani potrebovali by sme poradit, pri volani metody Login v controleri AuthenticationController vetva: PrihlasovanieApi. Objekt user Login([FromBody] LoginViewModel user) mi nevytvori mam null. Kde mam chybu ?

Volam: POST http://localhost:49781/api/Authentication/authenticate Body raw - json(application/json): {"Username":"Jozko", "Password":"superTajneHeslo", "RememberMe":"aaaa"}

Burgyn commented 8 years ago

Ahojte,

ešte som to nekukal v kóde. Ale podľa toho čo píšeš mi príde, že je to tím, že posielaš RememberMe = "aaaa" a pritom typujem, že RememberMe je na strane servera typu bool. Takže sa mu nepodarí deserializovať JSON.

Ale to je len typ z toho čo vidím v tomto príspevku. Ak to tým nie je tak daj vedieť a večer to kuknem.

On 21 March 2016 at 18:39, motycak notifications@github.com wrote:

Chalani potrebovali by sme poradit, pri volani metody Login v controleri AuthenticationController vetvi: PrihlasovanieApi. Objekt user Login([FromBody] LoginViewModel user) mi nevytvori mam null. Kde mam chybu ?

Volam: POST http://localhost:49781/api/Authentication/authenticate Body raw - json(application/json): {"Username":"Jozko", "Password":"superTajneHeslo", "RememberMe":"aaaa"}

— You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub https://github.com/FunnyBean/IntraWeb/issues/13#issuecomment-199395242

Prajem pekný zvyšok dňa, Ing. Milan Martiniak

motycak commented 8 years ago

...presne ako píšeš, ...ja som mal preklep... diky Miňo

Burgyn commented 8 years ago

Nemáš zač.

On 21 March 2016 at 21:46, motycak notifications@github.com wrote:

...presne ako píšeš, ...ja som mal preklep... diky Miňo

— You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub https://github.com/FunnyBean/IntraWeb/issues/13#issuecomment-199474561

Prajem pekný zvyšok dňa, Ing. Milan Martiniak

Burgyn commented 8 years ago

Ahojte, narazil som na zaujímavý blog ohľadom authentifikácie

https://blogs.msdn.microsoft.com/webdev/2016/03/15/get-started-with-asp-net-core-authorization-part-1-of-2/

https://blogs.msdn.microsoft.com/webdev/2016/03/23/get-started-with-asp-net-core-authorization-part-2-of-2/

satano commented 8 years ago

Ukladanie hesla

Na ukladanie hesla sa už neodporúčajú štandardné hashovacie funkcie (MD5, SHA...). Nielen kvôli bezpečnosti, ale aj kvôli rýchlosti - sú príliš rýchle a tak vhodné na brute force útok. Odporúča sa používať BCrypt. Pri ňom je možné určiť háročnosť hešovania (work factor), čo výrazne spomalí vytvorenie hešov a teda úplne znemožní brute force útok. Odmeral som si to u seba a vygenerovanie 100 hešov použitím SHA256 (tak ako je to teraz) trvalo menej ako tisícinu sekundy. 100 hešov použitím BCrypt s náročnosťou 10 trvalo 25 sekúnd. Zvyšovaním čísla náročnosti rastie potrebný výpočtový výkon exponenciálne. Pre produkciu by som pokojne dal 13 (v takomto prípade na mojom počítači trvá jeden heš cca 2 sekundy :smile:). Pre .NET Core je NuGet balíček BCrypt.NET-Core. Ďalšou výhodou je, že BCrypt automatikcy sám generuje salt, takže nie je potrebné sa o toto starať. Zjednodučí sa tým aj model, keďže nie je potrebná vlastnosť Salt a ani prípadný taký stĺpec v databáze. Použitie je veľmi jednoduché:

Vytvorenie hešu: BCrypt.HashPassword("heslo na zahešovanie", 13)

Overenie hesla pri prihlásení: BCrypt.Verify("heslo čo zadal používateľ", "uložený heš hesla")

Iné

V projekte som si fšimol nejaké nepoužívané triedy: StatusCodeResult, LoggingRepository (je to rovnaké ako UserRepository), ILoggingRepository, ApplicationUser. Nie je dobré sa ich zbaviť, nech zbytočne ľloveka nemätú?