#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
Комментариев нет:
Отправить комментарий