1

Я использую Google Cloud Endpoints с Java, и я хочу создать систему входа для своих пользователей. То, что я хочу сделать, очень просто: я просто хочу, чтобы они продолжали сеанс, когда они вошли в систему, используя свои электронные письма и пароли.Google Cloud Endpoints и аутентификация

Однако с облачными конечными точками это кажется очень сложным. Похоже, что моим пользователям придется владеть учетной записью Google, которая, по моему мнению, является очень важным ограничением, и это неприемлемо. Я видел несколько потоков, подобных этому: Google Cloud Endpoints limitations... any proposed solutions?, но он не ответил на мой вопрос.

Есть ли простой способ сделать это?

ответ

2

Аутентификация конечной точки Android без учетной записи пользователя Google просто невозможно! Я пробовал все, но все еще не работает.

Итак, вот мой способ решить эту проблему без какого-либо взаимодействия с пользователем (возможно, это неправильно, но это работает, и у вас есть сильная аутентификация (SHA1 + Google счет)):

ВОТ МОЯ ANDROID КОД

Получить и построить Valid Credential

//Get all accounts from my Android Phone 
     String validGoogleAccount = null; 
     Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ 
     Account[] accounts = AccountManager.get(context).getAccounts(); 
     for (Account account : accounts) { 
      if (emailPattern.matcher(account.name).matches()) { 
       //Just store mail if countain gmail.com 
       if (account.name.toString().contains("gmail.com")&&account.type.toString().contains("com.google")){ 
        validGoogleAccount=account.name.toString(); 
       } 

      } 
     } 

     //Build Credential with valid google account 
     GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(this,"server:client_id:301991144702-5qkqclsogd0b4fnkhrja7hppshrvp4kh.apps.googleusercontent.com"); 
     credential.setSelectedAccountName(validGoogleAccount); 

Используйте этот мандат для защищенных вызовов

Campagneendpoint.Builder endpointBuilder = new Campagneendpoint.Builder(AndroidHttp.newCompatibleTransport(), new JacksonFactory(), credential); 

ВОТ МОЯ API BACKEND КОД: API Аннотация код

@Api(
     scopes=CONSTANTES.EMAIL_SCOPE, 
     clientIds = {CONSTANTES.ANDROID_CLIENT_ID, 
        CONSTANTES.WEB_CLIENT_ID, 
        com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID}, 
     audiences = {CONSTANTES.ANDROID_AUDIENCE},  
     name = "campagneendpoint", 
     version = "v1" 
    ) 

Метод:

public Collection<Campagne> getCampagnes(@Named("NumPortable")String NumPortable, User user) throws UnauthorizedException { 
     if (user == null) throw new UnauthorizedException("User is Not Valid"); 

     return CampagneCRUD.getInstance().findCampagne(NumPortable); 
    } 

Для момент , он работает только на Android (я не знаю, как мы будем делать на IOS, без перекодировки моего собственного API oauth2 ..).

Надеюсь, это поможет!

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