Öncelikle elinize emeğinize sağlık. Şöyle bir sorum olucak hocam JWT yi localStorage da tutmak kullanıcı pc si bir şekilde ele geçirildiğinde browserın local storageına erişilip token alınıp başka bir noktadan erişimi kolaylaştırmaz mı? .net core backendli Vue ile frontendli bir projeye başlayacağım ama bu güvenlik konuları ve refresh token olayları kafamı kurcalıyor. Konuyla alakalı bildiğiniz döküman kaynak varsa çok sevinirim.
Sağlanabilir elbette tam olarak bu sebeple accesstoken kısmı var ama zaten bu bilgiler bilgisayardan alınabiliyorsa, bu client'ın sorumluluğunda olacaktır. Yapacak çok da bir şey kalmayabilir. Endişelenecek tek konu sizin sistem üzerindeki bilgilere erişim de olmayabilir :)
Hocam merhabalar, acaba yanlış mı yaptım diye videoyu 2 defa izledim ama yaptığınız bütün şeyleri yapmış olmama rağmen hala 401 Unauthorized hatası alıyorum. O kısmıda kesmişsiniz. O yüzden github ile de kıyaslıyamıyorum. Destek olma şansınız varmıdır acaba ?
Anlatım için elinize sağlık. Server Side bir uygulama geliştiriyorum ve expire nedense çalışmadı. Daha doğrusu, çalışıyor fakat authorize expire olsa bile devam ediyor. Bende bu soruna çözüm getirmek adına koda bazı eklemeler yaptım. Acaba bu eklemeleri yapmadan da çalıştırmanın bir yolu var mıdır? Şu an page refresh olmadığı sürece exp olsa bile, kullanıcı hala sayfalar arasında gezebiliyor. Fakat, sayfayı yenilediğinde otomatik olarak logine yönlendiriyorum. Ama sayfayı yenilemeden de expire olduğu vakit logine yönlendirmek istiyorum. Koda şu şekilde bir ekleme yaptım: Startup Options => ClockSkew = TimeSpan.Zero AuthStateProvider.cs try { String JwtToken = await localStorageService.GetItemAsStringAsync("token"); if (String.IsNullOrEmpty(JwtToken)) return anonymous; string username = await localStorageService.GetItemAsStringAsync("username"); var token = new JwtSecurityToken(jwtEncodedString: JwtToken); var expiry = token.Claims.First(c => c.Type == "exp").Value; //var expiry = claims.Where(claim => claim.Type.Equals("exp")).FirstOrDefault(); if (expiry == null) return anonymous; var datetime = DateTimeOffset.FromUnixTimeSeconds(long.Parse(expiry)); if (datetime.UtcDateTime
Expire olup olmadığı bilgisini her iki tarafta da tutabilirsiniz aslında. Diyelim ki server tarafında tuttunuz var expire olduğunda ExpireToken diye bir exception fırlatabilirsiniz daha sonra bu hatayı yakalayıp login'e yönlendirebilirsiniz direk. Daha önce servis tarafındaki hatalar için Extension metodumuz içerisinde ApiException fırlatmıştık, aynı yöntemi kullanarak yine Custom bir exception tipi fırlatabilirsiniz. Servise gittiğinizde expire olmuş bir token varsa bu şekilde yakalayabilirsiniz. Expire kontrol mekanizmaları ile ilgili 1-2 örneği aşağıya bırakıyorum. jasonwatmore.com/post/2020/05/25/aspnet-core-3-api-jwt-authentication-with-refresh-tokens stackoverflow.com/questions/43045035/jwt-token-authentication-expired-tokens-still-working-net-core-web-api stackoverflow.com/questions/55150099/jwt-token-expiration-time-failing-net-core/55155711
Hocam merhaba, anlatim icin tesekkurler. Aklima takilan bir soru var _client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", apiToken); anladigim kadariyla bu kod hep kontrol ediliyor ve apinin headerina tokeni gonderiyor. Login oldugumda userList geliyor ancak sayfayi yenilersem 401 unauthorize aliyorum. Nedenini gunlerdir arastiriyorum bulamadim. Yardimci olursaniz cok sevinirim.
Bu kod sürekli kontrol edilmiyor aslında. SPA (Single Page Application) gereği sayfalar sürekli olarak yenilenmiyor ve sen bir httpclient istediğin zaman sana bir öncekini verebiliyor. O yüzden login olduğumuzda, httpclient için token'ı yazıyoruz içine bir kere ki daha sonra da buradakini kullanabilsin diye. Bunun dışında AuthenticationStateProvider içinde de yine UserToken bilgisini set etmek gerekiyor. Orayı kontrol edebilirsiniz. LocalStorage da sakladığımız Token bilgisinin bu provider içindeki metodda client'a set edildiğinden emin olmak lazım
@@TechBuddyTR Hocam aynı sorunu ben de yaşıyorum. AuthenticationStateProvider içinde de UserToken bilgisini set etmek gerekiyor deyince bir göz attım. GetAuthenticationStateAsync() içine Breakpoint koydum. Ne login olurken ne de Kullanıcı listesini çağırırken hiç bir şekilde bu blog içine girmiyor. Sanırım Unauhorized almamızın sebebi bu. Bu metodun nerede çağırılması gerekiyordu? Sanki boşta kalmış gibi. Hatamız nerede olabilir? Düzeltme: Startup.cs'de bu iki arkadaşın sırası tam tersiydi. Authentication'ı Authorization'ın üstüne koyunca düzeldi sanırım. Farklı bir şeyler yaptım mı kurcalarken emin değilim ondan. app.UseAuthentication(); app.UseAuthorization();
Merhaba anlatım için teşekkürler.Main Layout ta dediklerinizi uyguladıktan sonra uygulamayı çalıştırıyorum ve login yapmadan bir sayfaya girdiğimde Main Layout sayfasının OnInitializedAsync metoduna düşmüyor.Bu yüzdende Authenticate edilip edilmediğini kontrol edemiyorum.Object reference not set to an instance of an object. hatası almaktayım
Merhabalar, teşekkür ederim. Videodaki tüm değişiklikleri uyguladıysanız aslında sorun yaşamıyor olmanız lazım. github adresindeki projeye ulaşarak ilgili kodları karşılaştırabilir misiniz? Main Layout sayfasında OnInitializedAsync çalışmıyorsa zaten proje ile ilgili başka bir sorun var demektir. Client tarafını debug edemediğiniz için girmiyor diye düşünüyor olabilir misiniz? Console.Write("LOG") şeklide bir log ekleyerek tarayıcıdaki console kısmında logun düşüp düşmediğine bakabilirsiniz
(AuthenticationStateProvider as AuthStateProvider) bu hep boş diye hata veriyor injection da yaptım hem backendde hemde blazor içinde hemde casting yaptım nedendir acaba?