Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Нужно ли получать Token? и как?

#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

Комментариев нет:

Отправить комментарий