2012-08-30 16 views
6

私の会社のソリューションは、次のアーキテクチャで開発しています。RESTfull Webサービス django上に構築され、 ウェブクライアントアプリケーションおよびモバイルクライアントアプリケーション電話帳を使用して書かれています)。django上に構築されたRESTfull Webサービス上のWebアプリケーションとモバイルアプリケーションの認証

私たちはクライアント側の認証方法について多くのことを探しており、Webクライアントとモバイルクライアントの両方のアプリケーションをサポートしています。(これは非常に貧弱ですが)APIを生成することを考えていますモバイルクライアントアプリケーションからログインした各ユーザのキーと、このAPIキーをデバイスのローカルストレージに保存するステップと、 Webクライアントでは、POST、PUT、およびDELETE要求にCSRFトークンを含む従来のCookieセッション管理を使用します。

認証方法に関するベストプラクティスは何ですか?このアプローチは十分ですか?認証に対処する他の方法はありますか?どちらが最高ですか?

oAuthを使用して無効にしようとしています。これは、私たちの開発が複雑になるためです。

this questionが既にチェックされていますが、その答えは私たちには大きな助けにはなりません。私たちはphonegapを使用しており、前述のアーキテクチャを持っているからです。

ありがとうございました!

答えて

1

本当に本当に本当に自分の解決策を作りたいと思ったら。 oAuth時代の私の古い悪い解決策です。

  1. ユーザー名とログインが成功した後、いくつかのキーを返すビューを作成/渡し、リクエストで
  2. チェックキーをdbに生成されたACCESS_KEYを追加=> DB =>ログイン

    #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 
    
に存在する場合

ここで、access_keyをどこかに保存して、リソースを休止するすべての呼び出しに 'access_key_or_any_other_name'というヘッダーを追加できます。 authバックエンドではなく、認証ミドルウェアを作成します。

#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 

あなたは車輪を再構築したくありません。 oAauthを使用すると、将来のためにaccess_tokenを保存できます。

+0

このアプローチは、OAuth 2.0クライアントの資格情報grant type/flowと似ています。 –

関連する問題