2012-08-30 6 views
6

Tôi đang phát triển giải pháp cho công ty của mình với kiến ​​trúc sau: Dịch vụ Web RESTfull được xây dựng trên django cung cấp lớp xác thực và kiên trì cho cả hai ứng dụng khách web của ứng dụngứng dụng khách trên thiết bị di động (được viết bằng cách sử dụng phonegap).Xác thực đối với web và ứng dụng di động trên dịch vụ web RESTfull được xây dựng trên django

Chúng tôi đã tìm kiếm rất nhiều trên internet về phương pháp xác thực ở phía máy khách, cung cấp hỗ trợ cho cả ứng dụng web và ứng dụng dành cho thiết bị di động và từ những gì chúng tôi đã tìm thấy (rất nghèo). cho mỗi người dùng đăng nhập từ ứng dụng khách trên thiết bị di động và lưu khóa API này vào bộ nhớ cục bộ của thiết bị; và, trong ứng dụng web, sử dụng quản lý phiên cookie truyền thống, bao gồm mã thông báo CSRF trong các yêu cầu POST, PUT và DELETE.

Chúng tôi muốn biết các phương pháp hay nhất về phương pháp xác thực là gì và cách tiếp cận này có đủ tốt không? Có cách nào khác để xử lý xác thực không? cái nào là cái tốt nhất?

Chúng tôi đang cố gắng hủy sử dụng oAuth, vì nó làm tăng thêm sự phức tạp cho sự phát triển của chúng tôi.

Chúng tôi đã kiểm tra this question nhưng câu trả lời của nó không có nhiều trợ giúp cho chúng tôi, vì chúng tôi đang sử dụng thẻ điện thoại và có kiến ​​trúc được đề cập.

Cảm ơn sự giúp đỡ của bạn!

Trả lời

1

Nếu bạn thực sự thực sự muốn tạo giải pháp riêng. Đó là giải pháp cũ của tôi trước thời điểm oAuth.

  1. Tạo view mà trở lại một số quan trọng sau khi đăng nhập thành công với username/vượt qua và thêm access_key tạo để db
  2. Kiểm tra quan trọng trong việc yêu cầu => nếu tồn tại trong db => đăng nhập

    #pseudo code 
    #view 
    from django.contrib.auth import authenticate, login 
    
    def get_my_token(request, username, password): 
        user = authenticate(username, password) 
        if user is not None: 
         login(request,user) 
         #first should check has access_key 
         try: 
          return UserAuth.objects.filter(user=user).access_key 
         except: 
          pass 
         access_key = 'somecrazy_random_unique_number' 
    
         user_auth = UserAuth() 
         user_auth.user = user 
         user_auth.access_key = access_key 
         user_auth.save() 
         return access_key 
    

Bây giờ bạn có thể lưu access_key ở đâu đó và thêm làm tiêu đề 'access_key_or_any_other_name' cho mọi cuộc gọi để nghỉ ngơi tài nguyên. Tạo phần mềm trung gian xác thực, không phải phần phụ trợ xác thực.

#auth_middelware 
    class StupidNoAuthMid(object): 
     def process_request(self, request): 
      access_key = reuest.META['access_key_or_any_other_name']: 
      try: 
       user = UserAuth.objects.filter(access_key=acces_key).user 
       auth.login(request, user) 
      except: 
       pass 

Bạn không muốn phát minh lại bánh xe. Sử dụng oAauth, bạn có thể lưu access_token cho tương lai.

+0

phương pháp này tương tự với thông tin đăng nhập ứng dụng OAuth 2.0 cấp loại/luồng. –