6

私は次のアーキテクチャを使用して会社向けのソリューションを開発しています。django上に構築されたRESTfullWebサービスは、 Webクライアントアプリモバイルクライアントアプリphonegapを使用して記述)の両方に認証と永続化レイヤーを提供します。

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

認証方法のベストプラクティスを知りたいのですが、このアプローチで十分ですか?認証を処理する他の方法はありますか?どれが一番いいですか?

開発が複雑になるため、oAuthを使用して無効にしようとしています。

この質問はすでに確認済みですが、phonegapを使用しており、前述のアーキテクチャを使用しているため、その回答はあまり役に立ちませんでした。

ご協力いただきありがとうございます!

4

1 に答える 1

1

あなたが本当に本当に本当に本当に独自のソリューションを作成したいのなら。これは、oAuth時代以前の私の古い悪い解決策です。

  1. username / passでログインに成功した後にキーを返すビューを作成し、生成されたaccess_keyをdbに追加します
  2. リクエストのキーを確認=>データベースに存在する場合=>ログイン

    #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_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を保存できます。

于 2012-09-04T14:24:10.410 に答える