Android - IOS Programlama
Token Login System (Yardım Algoritma Mantık Yardımı)
Token Login System (Yardım Algoritma Mantık Yardımı)
-
Hocalarım bu Token login muhabbetini 4 aydır uğraşıp uğraşıp duruyorum ama hep proje saçma sapan yerlere varıyor. Her kullanıcıya değişken bir Token veriyorum ve kullanıcı çıkış yaptığı anda Tokeni siliyorum vt den tekrar giriş yaptığımda farklı bir Token veriyorum ve sadece Tokenli sistem yapıyorum ama biraz saçma duruyor yaptığım iş şu. Örneğin vt ye user ekleyeceğim parametere olarak userid, userpw, token şimdi hocalarım her fonksiyon da böyle bir token alıyorum. her seferinde böyle tektek Token mi isteyeceğim. Birde Token doğru ise veri tabanı işlemleri yaptırıyorum. Buda bana her post da ekstra token vt de mevcut mu gibi bi saçmalık doğruyor. Proje de yavaşlama oluyor haliyle. Siz nasıl yapıyorsunuz? Paylaşır mısınız bizimle de :( birde token değişkenlikleri için ben kullanıcı adını bit e alıp bir bit sola kaydırıp tekrar normal ascii koda döküp zaman falan ekleyerek değişken bir token yaptım. Siz hangi yolları izliyorsunuz? Bit sola kaydırma vs vs gbi işlemlerde benim tokenler çözülebilir mi? Birde kullanıcı girişi var 5. Hata da adama 10 dk ban atıyorum vt de de ban durumu 1 yapıyorum kullanıcı giriş yaptığında süresi doldu ise ve şifre doğru ise giriş yaptırıyorum. Bu girişler çok önemli benim için sağlam kod yazmam gerekiyor artık. Biri yardım etse öğrenci duasını alır vallahi!
Android de kullanacağım
MhmdAlmz tarafından 18/May/16 11:53 tarihinde düzenlenmiştir -
-
KrypT bunu yazdı
Hocam burda sanırım keylerin yapım aşaması var kullanım aşaması yok. Mesela bu keyi. Oluşturdum ama her postta ben key alıp servis de decode mi etmem lazım sonra vt de bu adam var mı yok mu bunu öğrenmem gerekmez mi?
-
Hocam önce kulanıcı adı şifre karşılığında cliente token vereceksin. Clientte bunu örneğin local storage'da saklarsın. Sonra her requestte client mesela bearer auth ile tokenı header olarak servera yollar. Serverda verficiation işleminden sonra reqesti cevaplar. Öyle acayip bir yavaşlama yapacağını sanmıyorum? Her requestte veritabanından kontrol etmene gerek yok hocam. Girişte bir kere kontrol edip token oluşturduktan sonra token payload içerisinde user id gibi bilgileri saklayabilirsin. Dışarıdan buna müdahale edildiğinde token mismatch olacağından kullanıcı herhangi bir işlem yapamaz zaten.
Edit: Bu arada bu temel bir sistem. User verification sadece token signature ile sağlanıyor o yüzden bu şekilde örneğin logout işlemi yapamazsın. İşte bu noktada vt devreye giriyor. Oluşturulan tokenları redis ya da mongo gibi bir veritabanında saklarsan hem logout gibi fonksiyonları sağlayabilir, hem de bir katman daha güvenlik eklemiş olursun. Tabi bunu yaparsan server stateless olmaktan çıkar ve JWT'nin kullanım amacına tamamen ters düşersin.
-
Login sistemi çok başını ağrıyorsa framework kullansana.
-
@KrypT hocam o kadar büyü bi proje değil mongo'luk falan işim yok :/ ama dediklerinizi dikkate alayım .
@PcK0 Hocam kullandığınız framework var mı ? birde framework'ler de bazen sıkıntı çıkartabiliyor.
-
MhmdAlmz bunu yazdı
@PcK0 Hocam kullandığınız framework var mı ? birde framework'ler de bazen sıkıntı çıkartabiliyor.
Nasıl sıkıntı?
Uzun (uygulamanın yüklenmesinden, silinmesine kadar) süreçte kullanacaksan JWT kullan. Başka çözüm yok. Kullanıcıya tek sefer JW tokeni atarsın, adam çıkış yapana ya da programı kaldırana kadar oturumu geçerli olur. Tokene de cihaza özel id eklersen, başka cihazlardan kullanılmasını engellersin. Ayrıca dağıtık mimariyi kullanabilmen kolaylaşır.
O tip şifreleme işlemlerini kullanmanı tavsiye etmem. Şöyle bir şey yapabilirsin: kullanıcı adı ile bir benzersiz id'yi birleştirir (o benzersiz id'ye tekrar ulaşabilmen lazım) sonra sha1 gibi bir algoritmayla hashını alırsın.
Veritabanına böyle limiti 1 olan sorgular yapmaktan çekinme. O arkadaşın işi o: Sen soracaksın, o cevaplayacak. Güvenlik için ise sp'lere yönelebilirsin hatta hatalı kullanıcı girişindeki sayma işlemlerini vs. tamamen vt'de halledebilirsin ki sunucunun zayıf halkası olan web tarafını (özellikle php) rahatlatırsın.
Performans için önemli olan çoğu zaman vt işlemleri değil de (ulan web sitesi işte, aşağı yukarı yaptığı iş crud), I/O işlemleri. Kısaca I/O işlemlerini kısmaya bak (SESSION'lar da dâhil). Çerezleri işin içine katmadım bile.
-
YeniHarman bunu yazdıMhmdAlmz bunu yazdı
@PcK0 Hocam kullandığınız framework var mı ? birde framework'ler de bazen sıkıntı çıkartabiliyor.
Nasıl sıkıntı?
Uzun (uygulamanın yüklenmesinden, silinmesine kadar) süreçte kullanacaksan JWT kullan. Başka çözüm yok. Kullanıcıya tek sefer JW tokeni atarsın, adam çıkış yapana ya da programı kaldırana kadar oturumu geçerli olur. Tokene de cihaza özel id eklersen, başka cihazlardan kullanılmasını engellersin. Ayrıca dağıtık mimariyi kullanabilmen kolaylaşır.
O tip şifreleme işlemlerini kullanmanı tavsiye etmem. Şöyle bir şey yapabilirsin: kullanıcı adı ile bir benzersiz id'yi birleştirir (o benzersiz id'ye tekrar ulaşabilmen lazım) sonra sha1 gibi bir algoritmayla hashını alırsın.
Veritabanına böyle limiti 1 olan sorgular yapmaktan çekinme. O arkadaşın işi o: Sen soracaksın, o cevaplayacak. Güvenlik için ise sp'lere yönelebilirsin hatta hatalı kullanıcı girişindeki sayma işlemlerini vs. tamamen vt'de halledebilirsin ki sunucunun zayıf halkası olan web tarafını (özellikle php) rahatlatırsın.
Performans için önemli olan çoğu zaman vt işlemleri değil de (ulan web sitesi işte, aşağı yukarı yaptığı iş crud), I/O işlemleri. Kısaca I/O işlemlerini kısmaya bak (SESSION'lar da dâhil). Çerezleri işin içine katmadım bile.
JWT yi ilk defa duyuyorum şu JWT Yi araştırayım biraz Birde Aslında Telefonun IMEI no ulaşabilirsem birleştiririm. 2. bir id bulayım. bide ben Login oldu Uygulama off durumda kullanıcıyı da off durumuna getirtiyorum . VT Ye çok fazla ekle güncelle sil işlemi oluyor . Bu yüzden belki VT'yi yorarım diye düşündüm. Temiz kod yazma derdindeyim şimdiden alışayım diye. sha1 i araştırmıştım da bi cacık anlamadım. Ben onu bir güzel daha araştırayım yoksa bu Sniff işi yaptığım işi öldürür. Teşekkürler abi yorumların için tekrardan :)
-
JWT'yi @KrypT dedi, gözden kaçırmışsın herhalde. JWT basitçe şöyle:
Tokenin içinde ne zaman başladığı, ne zaman geçerli olacağı, ne zaman sonlanacağı bilgilerinin yanı sıra, tokeni kimin tanımladığı, kullanıcı kimliği (kullanıcı adı), nerelerde geçerli olduğu, kullanıcının ne yetkisine sahip olduğu gibi bilgiler içeriyor. İlk kısmın ve ikinci kısmın özeti çıkarılıyor ve birleştirilerek üçüncü kısımda ayrı bir gizli anahtarla kodlanıyor. Tüm bu paketi kullanıcıya yolluyorsun. Sonraki her requestte ise birinci ikinci üçüncü kısımları karşılaştırarak ellenmemiş olduğundan emin oluyorsun. Evet, request ve response headera ek yük bindiriyorsun ve her işlemde tekrar tekrar doğruluyorsun. @KrypT'in verdiği ikinci bağlantıyı takip et.
Session kullansan, düşer ya da sunucu ile ilgili bir değişiklikte kaybolur. OpenAuth gibi bir şey kullansan, kullanıcının bilgilerini başka sistemlerle paylaşmış olursun, her requestte kullanıcı adı ve şifre istesen güvenliği tehlikeye atarsın ayrıca vt sorgularını tekrar tekrar çalıştırırsın.
Not: SSL kullanmadan her zaman dinlenme riski vardır.
-
@YeniHarman , Evet abi Son cümlesine pek dikkat etmemişim tekrar okudum. Bakayım o dediğinize SSL siz zaten iş yapmam dinlerler herşeyi. Şu 3 kısımlı token'i çözme yada yapma işlemlerini her seferinde Sunucuda tekrarlayacağımdan boşuna yorarım diye düşündüm servisi ama zaten olması gereken oymuş. Sanırım burda yapılacak önemli işler Tokeni oluşturmak ve Tokenin çözülmesi zor birşey haline getirmek. Şu login işlerini çözsem iyi olur E-Ticaret App'ları başımı yakacak gibi gözüküyor. Iyice kavrayayım. Ekstra şuna da bak dediğin kaynak varmıdır abi ? Bu başlı başına iş ya Crypto edilebilir bi token olsa bile sıkıntı yaratacaktır. Birde abi Tokenin sürekli değişmesi skıntı çıkarır mı ? oraya değişken bilgiler koysam Her off durumda da Tokeni Silsem VT den sürekli değişken token olması sanırım EnCrypt edilmesini zorlaştırır. Sha1 MD5'in bi gelişmiş versiyonu sanırım MD5 konusunda bi kaç bilgim vardı da Sha1 'i yeni duyuyorum araştırırken baktım da ikisi de şifreleme algoritması falan Crypt işlemlerine giriyor ... Ne zor işmiş yazılımcı olmak :D Neyse saçlarımız dökülsün artık yapacak bişey yok. :) En son login sistemini yaptıktan sonra bunu nasıl test edebilirim güvenirliğini ? Bu konuda da bilgi alabilir miyim . Birde bu Web programlamada 45 sayfa mı ne checklist varmış hepsini yapınca sağlam site oluyormuş E-Ticaret siteleri onlara göre yapılıyor muş . Bunun Android versiyonu var mıdır varsa adı nedir ? Bilgin var mı abi ?
-
Ek olarak ;
.Net 'in kendi yaptığı Token'i tavsiye eder misiniz ?
String Token=Convert.ToBase64String(Guid.NewGuid().ToByteArray());
i Kullansam ? Bi sıkıntı çıkarır mı ? Böyle otomatik bi Token veriyormuş zaten .Net Framework