2017-05-25 12 views
0

Google App Engineアプリケーションでユーザーセッションを管理する最適な方法は何ですか?理想的には私のアプリケーションをステートレスにしておき、メモリにユーザー関連のデータを保存しないようにしたいのですが、すべての要求に対してネットワークのユーザー資格情報を送信することも怖いです(すべての要求に対してユーザーを認証するには、お金がかかるDatastoreまで)。GAEアプリケーションでのユーザー認証の管理

私はGoogleのOAuth 2.0ソリューションをチェックアウトしましたが、自分のアプリケーションがGoogle APIのいずれかに接続したいと思っていて、自分のGoogleアカウントにアクセスするためにクライアントからの許可が必要な場合に役立ちます。

ユーザーセッションを管理する方法はありますか?最も一般的なシナリオは、ユーザがこの要求をに開始したを知り、要求パラメータとしてuserIdを送信する必要がないことです。

私たちはサードパーティプロバイダを使用していませんのでご注意ください。ユーザーは通常自分のページに自分自身を登録し、カスタムアカウントを持っています。私はではありません。は、サードパーティのサービスと認証を統合するのに役立つツールを探しています。それ以外の場合は、GoogleのOAuth 2.0または類似のAPIを使用しています。

+0

Authomaticは素晴らしいリソースです:https://github.com/authomatic/authomatic –

+0

更新された質問を確認してください。私はサードパーティプロバイダ経由での認証を求めていません**。 – Konstantine

答えて

0

オーセンティケータインターフェイスは常に実装できます。

 public class MyAuthenticator implements Authenticator { 
    @Override 
    public User authenticate(HttpServletRequest request) { 
     HttpSession session = request.getSession(false); 
     // 
     return null;// if not authenticated, otherwise return User object. 
    } 
} 

// Endpoints class. 
@Api(name = "example", authenticators = { MyAuthenticator.class }) 
public class MyEndpoints { 
    public Profile getProfile(User user) { 

     if (user == null) { 
      throw new UnauthorizedException("Authorization required"); 
     } 
     return new Profile(user.getEmail(), "displayName"); 
    } 

    // store this class somewhere in models 
    public class Profile { 
     private String email; 
     private String displayName; 

     public Profile(String email, String displayName) { 
      this.email = email; 
      this.displayName = displayName; 
     } 

     public String getEmail() { 
      return email; 
     } 




     public String getdisplayName() { 
      return displayName; 
     } 
    } 
} 

HttpServletRequestオブジェクトを使用して、従来のセッションベースのログインを実装するか、独自のカスタムヘッダーを使用します。まあ、あなたの場合による。認証されていない場合はnullを返し、認証された場合はUserオブジェクトを返します。また、両方の側(クライアントとサーバー)で何らかの暗号化を実装することで、セッションキーを持っている人があなたのAPIにアクセスするのを止めることができます。

関連する問題