0

次のGoogle Cloud Endpoints APIを使用しています。特定の役割を持つ認証済みのユーザーにのみアクセスできるようにしたいと考えています。コードのGoogle App EngineですべてのAPIエンドポイントを認証

数行は千個の言葉よりもはるかに言う:

import com.google.appengine.api.users.User; 

@Api(
    name = "heroesApi", 
    version = "v1", 
    clientIds = {...}, 
    scopes = {...}, 
    audiences = {...}, 
    namespace = @ApiNamespace(
     ownerDomain = "my.domain.com", 
     ownerName = "my.domain.com", 
     packagePath="" 
    ) 
) 

public class HeroesApi { 

    // THIS IS THE FUNCTION THAT I DON´T KNOW WHERE TO PUT 
    /** 
    * Validates that the user is logged in with a specific role 
    * @param user 
    * @throws UnauthorizedException 
    * @throws ForbiddenException 
    */ 
    private void validateUser(User user) throws UnauthorizedException, ForbiddenException { 
     IUserController userController = ControllerFactory.get.userController(); 
     if (user == null) { 
      throw new ForbiddenException("You must be logged in, my friend."); 
     } else if (!userController.isLoggedAsSuperHero(user)) { 
      throw new UnauthorizedException("You must be logged in as a Superhero."); 
     } 
    } 


    // API METHODS 

    @ApiMethod(path = "something", httpMethod = ApiMethod.HttpMethod.PUT) 
    public DoneTask doSomething(Some thing, User superhero) throws UnauthorizedException, ForbiddenException { 

     // this is what I want to avoid on each function 
     this.validateUser(superhero); 

     // Now I'll do something special 
     IUserController userController = ControllerFactory.get.userController(); 
     return userController.doSome(thing); 

    } 

    // MORE GORGEOUS METHODS JUST FOR SUPERHEROES, SO I HAVE TO PERFORM THE VALIDATION... 

} 

私が持っているといえ、すべての要求に/ API/heroesApi/*が、問題のweb.xmlファイルを使用してフィルタを追加する方法についてGoogle Appengine APIユーザーをキャッチする方法があります。

これはGoogleが提供するものではありませんか?アプリケーションが役割の概念を構築する必要があり、そしてあなたは、フィルタを作成し、現在のユーザーを取得する必要がありますので、

validateUser(User)に繰り返し呼び出しを回避するために、任意の提案は大歓迎

+0

明確にするために、J2EE認証でGoogle Cloudを介して誰が認証されるのかを判断したいと思いますか? –

+0

@ tim-biegeleisenメソッドレベルではなく、クラスレベルでユーザーを検証したいと思います。私が言及したようにすることは、回避策のようになりますが、それが機能すれば十分です。 –

答えて

0

Googleクラウドエンドポイントでは、デフォルトで役割を夕食はありませんフィルタに現在のユーザーを取得するには、あなたの最後

に維持の役割に対してチェック、私はこれをテストしていますが、AppEngineのでUserServiceのAPIを使用して、現在のユーザを得ることができると確信していなかったこの https://cloud.google.com/appengine/docs/java/oauth/

を試してみてくださいあなたが〜をするならrシステムは認証としてGoogleアカウントを使用します。

関連する問題