मैं एक वेब अनुप्रयोग अलग webclients (ब्राउज़र, मूल के मोबाइल एप्लिकेशन, आदि) का उपयोग कर उपयोगकर्ताओं को रजिस्टर करने के लिए अनुमति देने के लिए की जरूरत है कि है। साइन इन करने के बाद वे प्रतिबंधित सामग्री या अपनी सामग्री तक पहुंच सकते हैं (जैसे वे प्रविष्टियां बनाते हैं, आदि)।jax-रु बाकी वेब सेवा प्रमाणीकरण और प्राधिकरण
मैं अब तक क्या किया है: मैं एक jax-रु बाकी वेब सेवा (मैं glassfish पर अपने आवेदन की मेजबानी कर रहा हूँ) है कि निम्न विधियों को उजागर करता है बनाया:
- रजिस्टर - उपयोगकर्ता पोस्ट के अपने वांछित उपयोगकर्ता नाम/पासवर्ड/ईमेल/आदि; यदि उपयोगकर्ता नाम/ईमेल अद्वितीय है, तो इस उपयोगकर्ता के लिए एक प्रविष्टि डेटाबेस में बनाई गई है (मैं दृढ़ता के लिए हाइबरनेट का उपयोग कर रहा हूं)
- लॉगिन - उपयोगकर्ता POST का उपयोगकर्ता नाम और पासवर्ड। यदि वे ठीक हैं तो यूयूआईडी बनाया गया है और उपयोगकर्ता को लौटाया गया है (यह भविष्य के अनुरोधों के लिए टोकन के रूप में उपयोग किया जाएगा)। मेरे पास logedusers नामक एक सारणी है, उपयोगकर्ता आईडी, टोकन, वैध के रूप में कॉलम के रूप में।
यहाँ जहां यह मेरे लिए भ्रमित हो जाता है है।
चलो कहते हैं कि मैं एक और तरीका, getUserEntries, बस इतना ही उपयोगकर्ता द्वारा किए गए प्रविष्टियों लौट जाना है कि करते हैं। यह स्पष्ट करने के लिए, निम्न फ़ील्ड के साथ एक प्रविष्टि तालिका होगी: entryId, userId, text।
क्या सबसे अच्छा तरीका यहाँ है?
अब मुझे क्या करना है, मैं एक GET अनुरोध करता है और इस तरह टोकन में पारित किया गया है:
localhost:8080/myApp/getUserEntries?token=erf34c34
बाद में, यदि टोकन मान्य है, मैं logedusers मेज और आधारित userID मिल उस उपयोगकर्ता आईडी पर, सभी प्रविष्टियां प्राप्त करें और उन्हें जेसन के रूप में वापस कर दें।
कुछ इस तरह:
@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();
}
}
हालांकि, अगर मैं और अधिक तरीकों अगर वे एक मान्य उपयोगकर्ता द्वारा कहा जाता है कि डेटा प्रदान की है क्या होता है?
मुझे हर विधि की शुरुआत में यह चेक करना होगा।
मैं इस प्राधिकरण की प्रक्रिया पारदर्शी बनाना चाहते
तो, दो प्रमुख सवाल यहाँ:
- इस डिजाइन ठीक है? उपयोगकर्ता/पास के साथ संपूर्ण प्रमाणीकरण, उपयोगकर्ता बनाता है और स्टोर करता है और उपयोगकर्ता को टोकन भेजता है, उपयोगकर्ता भविष्य के अनुरोधों पर टोकन भेजता है।
- मैं अगर मैं कई अंतिमबिंदुओं बुला उपयोगकर्ता की पहचान निर्धारित करने की आवश्यकता है क्या करते हो? मैं उन्हें कुछ एनोटेशन के साथ चिह्नित कर सकते हैं, सुरक्षा प्रदाता/प्रमाणक किसी प्रकार का उपयोग करें (इसमें मैं सत्यापित करने के लिए अपने ही तर्क जोड़ सकते हैं - जैसे यदि टोकन, दिन नहीं 5 से अधिक पुराना है आदि देखने के लिए जाँच)।
धन्यवाद