2012-07-12 16 views
8

मैं भी अच्छी तरह से पैमाने पर करने के OAuth 2.0 और REST API लागू करने के लिए यहओएथ 2.0। कोई सत्र नहीं? (स्टेटलेस)

के साथ उपयोगकर्ताओं को प्रति विभिन्न अनुमतियों देने के लिए जा रहा हूँ और। इसके साथ न होने के कारण

नहीं फ़ाइल, डेटाबेस, इन-स्मृति आधारित सत्र

अच्छी तरह पैमाने पर करने के लिए, राज्यविहीन आसान है।


नीचे मैंने समझ में OAuth 2.

  1. OAuth सर्वर एक उपयोगकर्ता के लिए पहुंच टोकन देना है।
  2. उपयोगकर्ता का एक्सेस टोकन कुकी में संग्रहीत किया जाता है।
  3. जब उपयोगकर्ता REST API तक पहुंचता है, तो उपयोगकर्ता पहुंच टोकन के साथ भेजता है।
  4. सर्वर पहुंच टोकन के साथ अनुरोध प्राप्त करता है।
  5. सर्वर यह पता लगाता है कि एक्सेस टोकन मान्य है या नहीं, उपयोगकर्ता को अनुरोध करने की अनुमति है।
  6. उपयोगकर्ता के विशेषाधिकार के आधार पर करें या अस्वीकार करें।

तो मैं सत्र भंडारण के बारे में चिंता करने की जरूरत नहीं है। सही?

+0

इस लाइब्रेरी पर एक नज़र डालें https://pypi.python.org/pypi/python-oauth2 – DarkAnthey

उत्तर

8

आप यहां क्या वर्णन कर रहे हैं, ओएथ 2 Implicit Grant flow है। ओथ 2 में तीन अन्य प्रवाह भी शामिल हैं, लेकिन ऐसा लगता है कि आपका रिसोर्स स्वामी (उपयोगकर्ता) ब्राउज़र पक्ष जावास्क्रिप्ट (आप कुकीज़ के बारे में बात कर रहे थे) का उपयोग कर अनुरोध शुरू कर रहे हैं, यह वह प्रवाह है जिसके लिए आपको जाना चाहिए।

क्लाइंट साइड पर, ओएथ केवल आपको access_token को संरक्षित संसाधनों तक पहुंचने के लिए स्टोर करने की आवश्यकता है (और refresh_token यदि आप access_token की समाप्ति के लिए जा रहे हैं)।

+2

एक्सेस टोकन के विरुद्ध जांच करने के लिए उसे एक होना होगा डीबी सर्वर पक्ष।;) –

+0

निश्चित रूप से, सर्वर पक्ष पर उसे प्रत्येक एक्सेस टोकन के बारे में पता होना चाहिए जिस पर उपयोगकर्ता की तरफ से जारी किया गया था और कौन से स्कोप दिए गए थे। वैकल्पिक रूप से वह बेहतर सुरक्षा के लिए अनुमति 'redirect_uri' को भी याद और जांच सकता है। यदि वह "सत्र भंडारण" के साथ है, तो मैंने सवाल को गलत समझा;) –

+1

'redirect_uri' के बारे में हिस्सा भूल जाओ, यह गलत है। मुझे बिस्तर पर जाना चाहिए ;) –

4

एक हालिया नवाचार जेडब्ल्यूटी - जेएसओएन वेब टोकन है। JWT - JSON Web Token

जेडब्ल्यूटी जो एक हैश आधारित संदेश प्रमाणीकरण कोड के लिए खड़ा है इस तरह के HMAC के रूप में एक हैशिंग पद्धति का उपयोग करके टुकड़ों में बांटा टोकन का उपयोग करने का एक तरीका है:

यहाँ कल्पना करने के लिए एक कड़ी है। चूंकि टोकन को एक गुप्त कुंजी का उपयोग करके धोया जाता है, सर्वर यह निर्धारित कर सकता है कि टोकन को छेड़छाड़ की गई है या नहीं।

यहाँ जेडब्ल्यूटी के लिए एक टुकड़े किए गए टोकन बनाने के लिए एक उदाहरण विधि है:

public User parseUserFromToken(String token) { 
    final String[] parts = token.split(SEPARATOR_SPLITTER); 
    if (parts.length == 2 && parts[0].length() > 0 && parts[1].length() > 0) { 
     try { 
      final byte[] userBytes = fromBase64(parts[0]); 
      final byte[] hash = fromBase64(parts[1]); 

      boolean validHash = Arrays.equals(createHmac(userBytes), hash); 
      if (validHash) { 
       final User user = fromJSON(userBytes); 
       if (new Date().getTime() < user.getExpires()) { 
        return user; 
       } 
      } 
     } catch (IllegalArgumentException e) { 
      //log tampering attempt here 
     } 
    } 
    return null; 
} 

यहाँ एक है:

public String createTokenForUser(User user) { 
     byte[] userBytes = toJSON(user); 
     byte[] hash = createHmac(userBytes); 
     final StringBuilder sb = new StringBuilder(170); 
     sb.append(toBase64(userBytes)); 
     sb.append(SEPARATOR); 
     sb.append(toBase64(hash)); 
     return sb.toString(); 
    } 

यहाँ एक टोकन डिकोडिंग यह सुनिश्चित करने के लिए का एक उदाहरण है के साथ छेड़छाड़ नहीं की गई थी एक और पूर्ण उदाहरण के साथ आलेख: Stateless Authentication

संबंधित मुद्दे