2012-07-12 5 views
8

(vatansız).OAuth 2.0. Oturum yok mu? Ben kullanıcılara göre farklı izinleri vermek o</p> <p>ile <strong>OAuth 2.0</strong> ve <strong>REST API</strong> uygulamak için gidiyorum ve de iyi ölçekli

HAYIR dosya, veritabanı, bellek içi tabanlı oturum onunla olduğundan

iyi ölçek için vatansız daha kolaydır. Aşağıda


OAuth 2.

  1. OAuth sunucusu, kullanıcıya bir erişim simgesi vermek anlamaya nasıl.
  2. Kullanıcının erişim belirteci çerezde depolanır.
  3. REST API'sine kullanıcı erişimi olduğunda, kullanıcı erişim belirteci ile birlikte gönderir.
  4. Sunucu, erişim belirteci ile istek alır.
  5. Sunucu, erişim belirtecinin geçerli olup olmadığını ve kullanıcının istekte bulunma izni olduğunu öğrenir.
  6. Kullanıcının yetkisine bağlı olarak yapın veya reddedin.

yüzden oturum depolama konusunda endişelenmenize gerek yok. Sağ?

+0

Bu kütüphaneye bir göz atın https://pypi.python.org/pypi/python-oauth2 – DarkAnthey

cevap

8

Burada anlattığınız şey, OAuth 2 Implicit Grant flow. OAuth 2'de diğer üç akış da vardır, ancak ressource sahibi (kullanıcı) tarayıcı tarafı Javascript (istekleri hakkında konuşuyordunuz) kullanarak istekleri başlatıyor gibi görünüyor, bu sizin için gitmeniz gereken akış. İstemci tarafında

OAuth sadece (bir süresi dolan access_token için gidiyoruz ve bir refresh_token) korumalı ressources erişmek için access_token depolamak gerektirir.

+2

Erişim belirtecini kontrol etmek için bir db sunucu tarafı.;) –

+0

Tabii ki, sunucu tarafında, kullanıcı adına düzenlendiği ve hangi kapsamların verildiği her erişim belirtecini bilmek zorundadır. İsteğe bağlı olarak, daha iyi güvenlik için izin verilen 'redirect_uri'yi de hatırlayabilir ve kontrol edebilir. Eğer "oturum belleği" ile kastettiği buysa, soruyu yanlış anladım;) –

+1

'redirect_uri' ile ilgili kısmı unut, yanlış. Yatağa gitmeliyim ;) –

4

Daha yeni bir yenilik JWT - JSON Web Jetonudur. JWT - JSON Web Token

JWT'de bir karma tabanlı mesaj doğrulama kodu temsil örneğin HMAC gibi bir karma yöntemi kullanılarak Hashed belirteçleri kullanarak bir yöntemdir: Burada

spec bir bağlantıdır. Jeton bir gizli anahtar kullanarak karma olduğundan, sunucu belirtecin değiştirilip değiştirilmediğini belirleyebilir.

Burada
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; 
} 

aşağıdakilerden biridir: tahrif değildi Burada

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(); 
    } 

bunu sağlamak için bir belirteç kodunun çözülmesi bir örneği, ortalama:

JWT'de için Hashed belirteci oluşturmak için bir örnek yöntem Daha eksiksiz bir örnekle makale: Stateless Authentication