Мне очень жаль, если это много вопросов. Я немного новичок здесь.
ался реализоватьOAuth 2.0
процесс аутентификации в моем приложении.
У нас есть внутренний сервер с REST API, полностью закодированный на Java и с интегрированным Spring.
Приложение зарегистрировано наFirebase
(Я могу получить к нему доступ через консоль), и я успешно реализовалGoogle SignIn
процесс иEmail/Password
(пользователи добавляются в мою базу данных, как показано в консоли Firebase).
Моя проблема здесь, скорее всего, мое плохое понимание процесса OAuth: насколько я понимаю, я должен использоватьFirebaseUser.getIdToken(bool)
из приложения, чтобы получитьJWT
(JSON Web Token), который я отправляю (черезHTTP Post
) на внутренний сервер для запроса пользователя, который потребовал бы аутентификации (что-то типа отправки информации, которую наш сервер должен сохранить в нашей базе данных пользователей в строке, связанной с UID, связанным с пользователем, отправляющим запрос).
я верюэтот документ это тот, которому я должен следовать, чтобы достичь своей цели. Однако эта часть фрагментов кода, представленная в документе, оставляет меня в замешательстве:
FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
.addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (task.isSuccessful()) {
String idToken = task.getResult().getToken();
// Send token to your backend via HTTPS
// ...
} else {
// Handle error -> task.getException();
}
}
});
idToken
Я получаю это 1232 символа в длину. Я обязан отправить всю строку? Структура выглядит так:{alg,kid}.{iss,name,picture,aud,auth_time,user_id,sub,iat,exp,email,email_verified,firebase{...}}.XXX
, Есть довольно много полей, которые я бы обрезал, так как я не буду использовать их на стороне сервера.Кажется, сейчас я не могу получить право на «XXX» часть моего idToken. Я знаю, что это связано с цифровой подписью и что мне, вероятно, нужен открытый ключ и закрытый ключ (пока я не совсем уверен, где взять хорошие). Как мне справиться с этим?Что может// Send token to your backend via HTTPS
выглядеть (простой URL-адрес, содержащий строку, или есть правильный способ отправить JWT)?Является ли JWT всем, что сервер должен получить от клиента для процесса аутентификации?Могу ли я отправить дополнительную информацию с помощью JWT (например, что должна делать аутентификация после проверки)? Если нет, то должен ли я предположить, что это сделано после того, как сервер ответит клиенту, что теперь он ожидает запрос от аутентифицированного пользователя?Я видел, как люди звонили по некоторому URL, чтобы проверить свой токен, но я не уверен, какой URL мне следует использовать, какой токен я должен передать в нем, и что я должен ожидать в результате. Может бытьhttps://www.googleapis.com/oauth2/v1/userinfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg
или жеhttps://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
?Какова рольAdmin SDK
во всем этом?Я думал, что все кончено, и это все, что мне нужно, пока я не наткнулся наэтот другой документ что приносит другие вопросы:
Есть лиimplementation 'com.google.firebase:firebase-admin:6.3.0'
нужно только быть в коде на стороне сервера? Видимо да!Где мне подключить мойfirebase-adminsdk.json
файл во всем этом?В Firebase Admin SDK установите код, предоставленный Google.FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
а такжеFileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");
: какой файл JSON мне подключить?Тот, который упоминается чуть выше!Мой сервер должен иметьgoogle_services.json
интегрированы?Похоже, это в основном говорит об использовании FirebaseDatabase
, Можно ли использовать мою собственную БД (это MySQL, размещенный на GoDaddy)?Да!Мне очень жаль, если это много вопросов. Я немного новичок здесь.