Kullanıcıların farklı web tarayıcıları (tarayıcı, yerel mobil uygulama, vb.) Kullanmasına izin vermesi gereken bir web uygulamasına sahibim. Oturum açtıktan sonra, kısıtlanmış içeriğe veya kendi içeriğine erişebilirler (oluşturdukları girişler, vb.). Ben aşağıdaki yöntemleri gösterir bir jax-rs dinlenme webservice (ı GlassFish başvurumu ev sahipliği yapıyorum) oluşturuldu: Şimdiye kadar ne yaptıkjax-rs webservice kimlik doğrulaması ve yetkilendirme
- kayıt - Kullanıcı POST en onun istenilen kullanıcı adı/şifre/e-posta/vs; kullanıcı adı/e-posta benzersiz ise, bu kullanıcı için bir giriş veritabanında oluşturulur (Kalıcılık için Hazırda Bekletme özelliğini kullanıyorum)
- oturum açma - kullanıcı POST kullanıcı adı ve parola. Tamamlarsa UUID oluşturulur ve kullanıcıya gönderilir (bu, gelecekteki talepler için bir belirteç olarak kullanılacaktır). Ben userID, token, validSince sütun olarak logedusers adında bir tablo var.
İşte benim için kafa karıştırıcı oluyor.
Kullanıcı tarafından yapılan tüm girdileri döndürmesi gereken başka bir yöntemin, getUserEntries olduğumu varsayalım. Bunu daha açık hale getirmek için, aşağıdaki alanları içeren bir Giriş tablosu olacaktır: inputId, userId, text.
Buradaki en iyi yaklaşım nedir?
ben şimdi ne yaparsak, ben bir get istek yapmak ve bu gibi belirteci geçmek: belirteci geçerli olup olmadığını, ben logedusers masa ve dayansın gelen kullanıcı kimliği almak,
localhost:8080/myApp/getUserEntries?token=erf34c34
Ardından o userId üzerinde, tüm girdileri alın ve json olarak döndürün. Böyle
şey: Ancak
@GET
@Path("getUserEntries")
@Produces(MediaType.APPLICATION_JSON)
public Response getUserEntries(@QueryParam("token") String token) {
String userId=getUserIdFromToken(token);
if (userId == null){
return Response.status(Response.Status.UNAUTHORIZED).build();
} else {
//get some data associated with that userId, put it in the response object and send it back
return Response.ok().entity(response).build();
}
}
, onlar geçerli bir kullanıcı tarafından çağrılan eğer veri sağlar daha yöntemleri var ne olur?
Bu denetimi her yöntemin başında yapmak zorundayım.
Ben şeffaf bu yetkilendirme işlemini yapmak istiyorumYani, iki büyük soru burada:
- bu tasarım tamam mı? Kullanıcı/pass ile tüm kimlik doğrulaması, sunucu, kullanıcı için belirteçler gönderir ve depolar ve gönderir, kullanıcı gelecekteki istekleri üzerinde belirteci gönderir. i arayan kullanıcı kimliğini belirlemek gerekir birçok uç noktaları varsa
- ne yapmalıyım? Bunları bazı ek açıklamalarla işaretleyebilir, bir çeşit güvenlik sağlayıcısı/kimlik doğrulayıcısı kullanabilir miyim (doğrulama için kendi mantığımı ekleyebileceğim - örneğin belirtecin 5 günden eski olmaması vb.).
Teşekkür