#java #android #google #google_api
Подскажите, как правильно сделать аутентификацию юзера, допустим при Google LogIn ? Я не сильно в этом пока разобрался, поэтому прошу помочь понять, как правильно должно работать процесс LogIn-а. Получается, когда я делаю логин с помощью гугла, то я отправляю запрос, гугл его подтверждает и возвращает ответ с конкретным юзером, я беру id этого юзера, его почту, имя и отправляю на сервер. Сервер проводит подтверждение этого юзера и возвращает обратно все данные по нему... Но, что будет, если кто-то украл почту юзера, имя и id и отправил на сервер, и получил данные, получается не хорошо... Если я правильно понял, то нужно от гугла получать Token, его тоже отправлять на сервер, сервер когда его получит обратиться тоже в гугл и проверит тот или не тот токен, и тогда все будет работать как нужно. Но как в таком случае получить Token? Подскажите, насколько я в правильном направлении? Как вообще должен проходить процесс аутентификации с сервером? ПРАВКА Когда проходит аутентификация через гугл, то при нажатии на кнопку гугл предоставляет доступ к использованию своего апи.. Но ведь это никак не связано с аутентификацией на моем сервере... Получается я получаю аутентификацию на гугле и не понятно как ее правильно связать с аутинфикацей на моем сервере? ПРАВКА 2.0 public void initGoogleLogIn() { GoogleSignInOptions gso = getGoogleSignInOptions(); mGoogleApiClient = getGoogleApiClient(gso); SignInButton btnSignIn = (SignInButton) authorizationActivity.findViewById(R.id.btn_sign_in); btnSignIn.setOnClickListener(listener); } @NonNull private GoogleSignInOptions getGoogleSignInOptions() { return new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(context.getResources().getString(R.string.server_id)) .requestEmail() .build(); } @NonNull private GoogleApiClient getGoogleApiClient(GoogleSignInOptions gso) { return new GoogleApiClient.Builder(context) .enableAutoManage(authorizationActivity, listenerConnection) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // facebook FacebookImplementation.getCallbackManager() .onActivityResult(requestCode, resultCode, data); // google if (requestCode == States.GOOGLE_SIGNIN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); } } private void handleSignInResult(GoogleSignInResult result) { Logger.log(ActivityAuthorization.class, ""+ result.getStatus().toString(), Logger.ERROR); if (result.isSuccess()) { Logger.log(GoogleImplementation.class, "User is connecting by Google LogIn", Logger.ERROR); // Signed in successfully, show authenticated UI. }else { Logger.log(GoogleImplementation.class, "!!!!!!!!!!!!", Logger.ERROR); } }
Ответы
Ответ 1
В приложении подключаете либу гугла для авторизации. Данные пользователя нужно получать, насколько я знаю, от API Google Plus, который является хранилищем данных пользователей. пользователь нажимает кнопку "авторизоваться", у него промигивают окна (авторизация на гугле, выдача разрешений) и он возвращается в приложение. приложение получает от либы данные пользователя и access_token. передаете access_token на свой сервер. Никакие данные пользователя получать от либы и передавать на сервер не требуется, им нельзя будет доверять. используя access_token, на сервере получаете от гугла необходимые данные пользователя и производите необходимые действия по авторизации/регистрации, после чего отвечаете приложению. Возможно, access_token, полученный в приложении, так просто нельзя будет использовать с сервера (с другого ip). Как правило, это решается добавлением некоего параметра к запросу авторизации. Получение access_token выполняется примерно таким образом: accessToken = GoogleAuthUtil.getToken( getApplicationContext(), mPlusClient.getAccountName(), "oauth2:" + Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE+" https://www.googleapis.com/auth/plus.profile.emails.read"); Здесь хорошие примеры кода по получению токена: https://stackoverflow.com/questions/23759529/android-how-to-get-google-plus-access-tokenОтвет 2
В вашем случае без токена никак нельзя Для начала прочтите эту статью А потом загляните в Google OAuth 2.0 песочницу Вам многое станет понятно сразу Для подробного изучения рекомендую прочесть документ технический стандарт OAuth 2.0
Комментариев нет:
Отправить комментарий