scala - प्ले 2 फ़्रेमवर्क का उपयोग करके टोकन आधारित प्रमाणीकरण




rest authentication (2)

मैं स्केला में प्ले फ़्रेमवर्क 2 का उपयोग करते हुए एक एप्लिकेशन को ब्वाडिंग कर रहा हूं। यह विशुद्ध रूप से शोकहदा होगा, कॉल के समय में एक जावास्क्रिप्ट एकल पृष्ठ एप्लिकेशन से किया जा रहा है।

टोकन-आधारित प्रमाणीकरण को एकीकृत करने का सबसे अच्छा तरीका क्या होगा? प्ले 2 के लिए कई प्रमाणीकरण पुस्तकालय हैं, साथ ही कच्चे Secured विशेषता, लेकिन यह स्पष्ट नहीं है कि कौन सा सबसे सुविधाजनक होगा

आपकी सहायता और आपके सुझावों के लिए धन्यवाद


मुझे लगता है कि आपको जेम्स वार्ड के दृष्टिकोण पर एक नज़र रखना चाहिए।

संक्षेप में दृष्टिकोण काफी सीधे है:

  1. उपयोगकर्ता अनुरोधों सूचकांक पृष्ठ और आपके सिंगल-पेज एप्लिकेशन को लोड करता है
  2. एप्लिकेशन यह पता लगाने की कोशिश करता है कि ब्राउज़र की कुकी में संग्रहीत कोई सुरक्षा टोकन है या आप स्थानीय स्टॉरेज का उपयोग कर सकते हैं
  3. यदि कोई टोकन नहीं है - लॉगिन पृष्ठ प्रदर्शित किया जाता है
  4. यदि टोकन मौजूद है - हमें लगता है कि हम पहले ही प्रमाणीकृत हैं
  5. ऐप ऐप से कस्टम डेटा में टोकन का उपयोग करके कुछ डेटा लाने की कोशिश करता है (जैसे एक्स-एट-टोकन)
  6. सर्वर टोकन मान्य करता है और डेटा के साथ प्रतिक्रिया देता है अगर सब कुछ ठीक है
  7. अगर टोकन वैध सर्वर 401 के साथ प्रतिक्रिया नहीं करता है, तो चरण 3 से जारी रखें
  8. आपके सर्वर पर हर अनुरोध एक ही टोकन का उपयोग करता है

यदि आप विवरणों में गहराई से जाना चाहते हैं, तो अधिक प्रश्न पूछने के लिए स्वतंत्र महसूस करें!


यदि आप "टोकन-आधारित" कहते हैं, तो आप जेडब्ल्यूटी को संदर्भित करते हैं, तो आप प्ले 2 में एचटीपी बेसिक प्रामाणिकता को कार्यान्वित करने के इस उदाहरण पर एक नज़र डालना चाहते हैं, और यह जवाब दोबारा: एक स्कैला बैकेंड पर जेडब्ल्यूटी कैसे कार्यान्वित करें अच्छा हिस्सा यह है कि आपको न तो कुकीज़ की आवश्यकता है, न ही प्रमाणित उपयोगकर्ताओं के लिए कैश है।

सुविधा के लिए 1 लिंक से सामग्री शामिल करना:

def Secured[A](username: String, password: String)(action: Action[A]) = Action(action.parser) { request =>
  request.headers.get("Authorization").flatMap { authorization =>
    authorization.split(" ").drop(1).headOption.filter { encoded =>
      new String(org.apache.commons.codec.binary.Base64.decodeBase64(encoded.getBytes)).split(":").toList match {
        case u :: p :: Nil if u == username && password == p => true
        case _ => false
      }
    }.map(_ => action(request))
  }.getOrElse {
    Unauthorized.withHeaders("WWW-Authenticate" -> """Basic realm="Secured"""")
  }
}

निम्नानुसार उपयोग करें:

def myAction = Secured("admin", "1234secret") {
  Action { request =>
    Ok
  }
}




http-token-authentication