Java EE ile geliştirilen bir uygulamaya lisans kontrolü eklemek istiyorum. Uygulamada dışarıya açık 6 tane fonksiyon var. Kullanıcı lisans yüklemesini yaptıktan sonra lisans tipine göre bu fonksiyonların tamamını veya birkaçını kullanacak. Ayrıca lisansın belli bir geçerlilik tarihide olmalı.

Hazır lisanslama api'leri bilmiyorum, kendim bir lisans api'si yazmak istiyorum ve güvenliği de önemli tabiki. Daha önce böyle bir tecrübesi olanlar nasıl bir yol haritası uygulamak gerektiği konusunda yardımcı olabilir mi?

soruldu: 15 Oca '14, 05:29

MDemir's gravatar image

MDemir
2.1k173445
cevap kabul oranı: 24%

değiştirildi: 20 Oca '14, 12:09

CemIkta's gravatar image

CemIkta ♦
19.9k29125190


Bu tür bir lisanslama icin en uygunu ve bircok API Provider(API saglayici)'in kullandigi OAuth (OAuth Wikipedia) sistemidir. Google, Twitter, LinkedIn gibi bircok API saglayicisi OAuth sistemi ile gelistiricilere, 3 parti plugin, add on gelistirenlere kendi API'lerini sunmakta, istenildigi zaman API erisimi engellenebilmekte veya ucretli aylik, yillik abonelikler verilebilmektedir.

OAuth yardimci programlari halihazirda bircok dilde kodlanmis ve cogunlukla open source kullanima sunulmustur.

Nasil calistigini ogrenmek acisindan Google Accounts Authentication and Authorization dokumanlarina bakabilirsiniz. Ayni sistem Twitter ve LinkedIn icin de kullanilmaktadir.

permanent link

cevaplandı: 20 Oca '14, 12:08

CemIkta's gravatar image

CemIkta ♦
19.9k29125190
cevap kabul oranı: 36%

1

Merhaba hocam, OAUTH konusunda kafamda oturmayan şeyler var, (ben birşeyi yapmadan öğrenemeyenlerdenim). Yukarıda bahsettiğim senaryoda oauth sizce uygulanabilir mi? İkinci bir soru ise mesela bir uygulamada kullanıcıların kullanıcı oluşturma işlemlerini kendi uygulama sunucumuz yerine tamamen oauth üzerinden yapmak ne kadar doğru olur?

(21 Oca '14, 07:13) dreampowder dreampowder's gravatar image
2

@dreampowder eger bazi API bolumlerini sureli kullanima acmak, istedigin zaten kullanima son vermek istiyorsan OAuth iyi bir cozum. Abonelik sistemiyle kullanilan sistemlerde iyi calisabilir. Hardware ile sifrelemek mantikli degil cloud sistemlerinde. Asil olan hardware degil kullanicinin kullanim hakkidir. Ister PC'den web client'i acar kullanir, ister Tablet'den App'i acip kullanir, sonucta ikisi de ayni API'yi kullanir, OAuth bu tur islemlerde merkezi kontrol saglar. OAuth ile kendi kullanicilarinizi kayit edersiniz zaten, OAuth kayitli kullaniciya token id, consumer id verir.

(21 Oca '14, 08:01) CemIkta ♦ CemIkta's gravatar image
2

Kisaca OAuth da Provider sen oluyorsun, senin API'lerini degisik programlar araciligiyla kullananlar (web client, mobil app vs. olabilir) OAuth Consumer oluyor. Consumer olanlar kayit olup, kullanici adi, sifre, token id, consumer id alir kendine. Twitter ornegi gibi. Twitter API yi kullanan bir API yaziyorsam Twitter API yi kullanmak icin OAuth ile Twitter'den kullanim izni almam lazim. Twitter bana twitter.consumer_key ve twitter.consumer_secret vererek bunu kontrol ediyor. Bu durumda Twitter OAuth Provider, kullanan kisi OAuth Consumer oluyor. Provider istedigi zaman kullanimi durdurabilir.

(21 Oca '14, 08:05) CemIkta ♦ CemIkta's gravatar image

Teşekkürler, şimdi kafamda daha iyi bir senaryo oluştu.. Ben uygulamamı bu yönde geliştirmeye odaklanayım...

(21 Oca '14, 08:11) dreampowder dreampowder's gravatar image

Yaklaşık 3 senedir lisanslama usulüyle çalışan bir uygulamanın geliştiricisi olarak söyleyim, öncelikle bir hacker istedikten sonra aşamayacağı lisanslama sistemi yoktur (bkz. koskoca microsoftu aşıyor adamlar). Ama yine de kullanıcı kitlenizin çok büyük bir kısmını oluşturacak olan standart kullanıcılar için aşağıdaki gibi bir yapı bana yeterli oluyor...

Uygulamamın ilk zamanlarında kullanıcı bilgisayarına yüklenen bir dosya aracılığı ile lisans aktivasyonu yapıyordum, fakat bu yöntemde zaman zaman kullanıcı ile olan anlaşmazlıklarda lisansı iptal etmek mümkün olmadığından bu yöntemi geride bıraktım.

Mevcut yapımda lisanslama işlemini aşağıdaki gibi yapıyorum. Lisanslama kendi kontrolümde olan bir sunucu üzerinden yapılıyor ve bu sunucu üzerinden ben istediğim kullanıcının lisansını aktif veya pasif hale getirebiliyorum:

  1. Kullanıcı bilgisayarından bir "unique id" üretiyorum. Bu "Unique id" bilgisayarın anakart seri numarası, işlemci numarası gibi donanımsal özelliklerinin harmanlanıp sadece sizin (yani lisans sunucunuzun) bildiği bir public key ile şifrelenir. Yani oluşturulan lisans bilgisayar başına oluşturulmuş olur.
  2. Bu oluşturulan şifre, internet üzerinde çalışmakta olan lisans sunucusuna gönderilir. (Bu mesajı da en azından iki sunucu arasında bilinecek bir şifre anahtarıyla şifreleyebilirsiniz)
  3. Lisans sunucusu bu anahtarı kendi veritabanında inceler ve lisansın durumu ile ilgili bir cevap gönderir. (AKTIF/PASIF, vs.. gibi)
  4. Kullanıcı tarafındaki sistem bu cevaba göre programı/özellikleri aktif hale getirir veya kapar...

Bu lisans kontrol işlemini ilk olarak uygulama açılışında, sonrasında birkaç saat aralıklarla sürekli olarak yapıyorum. Ayrıca her ihtimale karşı lisans sunucusunda problem oluşması ihtimaline karşı lisans sunucusundan cevap gelmediğinde program mevcut lisans ayarlarıyla 7 gün süreyle çalışmaya devam ediyor. (Böylece lisans sunucusunda oluşabilecek bir hatada 1 hafta içerisinde hatayı düzeltme şansım oluyor)

Tabi bu sistem için de birçok kaçış yolu olabilir; Mesela kullanıcı bilgisayarına kuracağı bir yan uygulamayla sunucudan gelen cevabı kaydedip, kendi kurduğu bir mock server ile sürekli aynı cevap gelecek şekilde ayarlayabilir . Bunu da önleyebilmek için lisans sunucusu ve kullanıcı uygulaması arasındaki public key'i belirli sürelerde zaman aşımına uğrayıp yenileneceği bir yapıya kavuşturabilirsiniz...

Lisans sunucusunuz için "Heroku" gibi bedava hosting sağlayan uygulama sunucularını kullanabilirsiniz...

permanent link

cevaplandı: 19 Oca '14, 09:07

dreampowder's gravatar image

dreampowder
3.3k112849
cevap kabul oranı: 23%

Merhaba Yukardaki 4 madde için herhangi bir program kullanıyormusunuz?(örneğin eziriz vb)

(19 Şub '14, 06:38) aspci aspci's gravatar image
1

@aspci Hayır hepsini kendim java ile oluşturdum...

(19 Şub '14, 06:46) dreampowder dreampowder's gravatar image

Benimde elimde winform uygulaması var eziriz programı ile güvenli hale ve lisanslı hale(bilgisayara özel) getirdim fakat programı kurduğum her bilgisayarda bu işlemi yapmak zorundayım bunu kodsal olarak yada farklı bir yöntemle nasıl yapabilirim önerileriniz var mı acaba?

(19 Şub '14, 06:53) aspci aspci's gravatar image

@aspci hocam eziriz programı hakkında hiçbir fikrim yok, fakat bana kalırsa yapılacak en iyi yol cemilkta hocanın da dediği gibi oauth'a geçmek bana kalırsa. Bunnu haricinde yukarıda belirttiğim maddeleri yapmak için herhangi bir 3rd party modüle gerek yok bana kalırsa.

(19 Şub '14, 06:58) dreampowder dreampowder's gravatar image

@dreampowder cemilka hocanın sunduğu çözüm anladığım kadarıyla winform uygulamları için geçerli değil.masaüstü programlarda kullanıcıyı api ile kontrol etmek ne kadar doğru bilmiyorum.

(19 Şub '14, 07:16) aspci aspci's gravatar image

@aspci aslında orada da yapman gayet mümün.. Benim yukarıda yazdığım uygulama daha önceden bir masaüstü uygulamasıydı. o zamanlar offline lisans erişimi için piyasada çok kullanılan yöntemlerden makinaya özel bir lisans dosyası oluşturup uygulama klasörüne koyuyorduk. bu lisans dosyası başka makinede çalışmıyor, (basit olarak, oluşturulan lisans dosyası içerisinde kulallanıcı bilgileri, donanım üzerinden üretilen bir şifre anahtarıyla şifreleniyordu. böylece donanım değiştiğinde lisans geçersiz kalıyordu). bu şekilde lisans kontrolü sağlıyorsunuz, ama tabi ne kadar güvenli orası size kalmış.

(19 Şub '14, 07:24) dreampowder dreampowder's gravatar image

Eziriz aynen dediğiniz işlemi yapıyor fakat her bilgisayarda ayrı ayrı lisanslamak gerekiyor buda insanları memnun etmez ki bir programcı olarak ta bende doğru bulmuyorum otomatik yapması lazım en azından.abilerimizin buna çözüm bulduklarını düşünüyorum fakat ben daha o çözümü bulamadım :) bulunca burada paylaşacam.

(19 Şub '14, 07:33) aspci aspci's gravatar image

@aspci benim anlamadığım sizin nasıl bir lisanslama yapmak istediğiniz? bilgisayar başına mı, kullanıcı başına mı ? bunları bilmeden bir yorum yapmak ta zor oluyor.

(19 Şub '14, 09:07) dreampowder dreampowder's gravatar image

Yapacağım lisanslama işlemi sadece bilgisayara özgü olacak .bir bilgisayara Programı kurduktan sonra artık başka birgisayar a kurulmayacak .Onun için programı kurduğumda otomatik lisans işlemi olması lazım.bu kadar olay.

(19 Şub '14, 09:32) aspci aspci's gravatar image
9 yorumdan 5 tanesi gösteriliyor hepsini göster
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×41
×6

Soruldu: 15 Oca '14, 05:29

Görüntüleme: 1,811 kez

Son güncelleme: 19 Şub '14, 09:32

powered by BitNami OSQA