2015-03-09 4 views
0

У меня есть эта очень простая аутентификация для моего приложения:Использования аутентификации Google с Restlet

MapVerifier mapVerifier = new MapVerifier(); 
    mapVerifier.getLocalSecrets().put("user", "pass".toCharArray()); 

    ChallengeAuthenticator guard= new ChallengeAuthenticator(null, ChallengeScheme.HTTP_BASIC, "Secured Resources"); 
    guard.setContext(getContext()); 
    guard.setVerifier(mapVerifier); 

Как адаптировать это использовать схему аутентификации Google? Это вместо того, чтобы показывать всплывающее окно пользователя/пароля, оно перейдет на страницу проверки подлинности Google.

ответ

5

Я думаю, что вы не в контексте аутентификации запроса, и вы должны ле выполните проверку службы аутентификации Google.

Вот реализация этого подхода (не тестировался), если вы хотите пользовательские Restlet Authenticator реализацию:

public class GoogleAuthenticator extends Authenticator { 
    private UserService userService; 

    public GoogleAuthenticator(Context context) { 
     super(context); 
     this.userService = UserServiceFactory.getUserService(); 
    } 

    protected User createUser(com.google.appengine.api.users.User googleUser, 
          Request request, Response response) { 
     return new User(googleUser.getUserId()); 
    } 

    protected boolean authenticate(Request request, Response response) { 
     // Get current Google user 
     com.google.appengine.api.users.User googleUser = userService.getCurrentUser(); 

     // Check if the user is authenticated 
     if (googleUser!=null) { 
      // Authenticated through Google authentication service 

      request.getClientInfo().setUser(
       createUser(googleUser, request, response)); 
      return true; 
     } else { 
      // Not authenticated. Redirect to the login URL 
      response.redirectSeeOther(userService.createLoginURL(
             request.getRequestURI())); 
      return false; 
     } 
    } 
} 

Однако такая аутентификация существует в расширении org.restlet.ext.gae на некоторое время. Он использует услугу UserService GAE. Поэтому я думаю, что у вас это есть с версией Restlet, которую вы используете. Вот пример использования ниже:

public Restlet createInboundRoot() { 
    Router router = new Router(getContext()); 
    (...) 

    GaeAuthenticator guard= new GaeAuthenticator(getContext()); 
    guard.setNext(router); 

    return guard; 
} 

Отредактировано:

Вы можете заметить, что аутентификатор GAE может использовать enroler GAE для этой цели (то есть, если это админ один).

Для реализации этого вам просто нужно создать экземпляр такого enroler и установить его на идентифицирующей, как мы проделали ниже:

GaeEnroler enroler = new GaeEnroler(); 
GaeAuthenticator guard = new GaeAuthenticator(getContext()); 
guard.setEnroler(enroler) 
guard.setNext(router); 

В вашем ресурсе сервера, вы можете проверить свою роль, как описано ниже:

protected boolean hasAdminRole() { 
    ClientInfo clientInfo = getClientInfo(); 
    List<Role> roles = clientInfo.getRoles(); 
    boolean isAdmin = false; 
    for (Role role : roles) { 
     if (role.getName().equals("admin")) { 
      isAdmin = true; 
      break; 
     } 
    } 
    return isAdmin; 
} 

@Post 
public XX handlePost(YY content) { 
    if (!hasAdminRole()) { 
     throw new ResourceException(Status.CLIENT_ERROR_FORBIDDEN); 
    } 

    (...) 
} 

Надеется, что это помогает вам, Тьерри

+0

в контексте ГА E есть учетная запись Google, которая является администратором. Есть ли способ сообщить в этом коде, что администраторы являются единственными, кто может получить доступ к ресурсу? – xybrek

+0

Я обновил свой комментарий, чтобы описать, как использовать регистратор gae для обработки учетной записи администратора. Надеюсь, это поможет вам. –

0

Я еще не понял, что такое ур вопрос? Если и хотел интегрировать аутентификацию Google в системе Yours проверить ссылку google Oauth2

Это не зависит от любых рамок это просто перенаправления и обратного вызова, который и может делать с простыми сервлет, очевидно, что вы можете сделать с restlets слишком

I написали просто библиотека для интеграции Google и Facebook OAuth 2, вы можете проверить это, чтобы увидеть, как это работает

java oauth2 gae

+0

вопрос связан с расширением Restlet GAE – xybrek

Смежные вопросы