2017-01-11 2 views
3

Я хочу генерировать сообщения от клиентов на моем сайте и отправлять сообщения на целевое устройство. Это просто с Ajax (JQuery) запроса, как это:Является ли FCM в Интернете безопасным без сервера приложений?

$.ajax({ 
    url: 'https://fcm.googleapis.com/fcm/send', 
    type: 'POST', 
    contentType: "application/json", 
    dataType: 'json', 
    data: JSON.stringify({ 
     "notification": { 
      "title": title, 
      "body": msg, 
      "sound": "default" 
     }, 
     "to": "XXXXXXXXXXXX" 
    }), 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader('Authorization', 'key=YYYYYYYYYY'); 
    } 
}); 

Но тогда мне не нужно держать ключ устройства ХХХХХХХХХХХХ и YYYYYYYYYY API ключ частного? Если нет, я беспокоюсь, что люди начинают выскакивать и спамить от совершенно несвязанных услуг?

+1

Я понимаю, что могу отправить запрос на сервер приложений, чтобы отправить это сообщение, и держать ключи в секрете, но я думал, что основная особенность firebase заключается в том, что он предотвращает необходимость использования собственного бэкэнда. В общем, я не уверен, как вы можете обоим. – johnb003

+0

В случае, если кто-либо найдет это, теперь есть ответ! https://firebase.google.com/docs/functions/ – johnb003

ответ

7

Это определенно не безопасно. Ключ, который вы передаете в заголовок Authorization, называется сервером, поскольку вы должны использовать его только на сервере приложений (или в каком-либо другом процессе, который вы непосредственно контролируете).

Если вы поместили этот же ключ в код, который запускается на устройстве каждого клиента, это означает, что злонамеренные пользователи могут (и, следовательно, будут) иметь возможность скопировать ваш ключ сервера и использовать его для отправки сообщений пользователям вашего приложения от вашего имени ,

Документация Firebase Cloud Messaging объясняет это в своем section on FCM Server roles. У нас также есть blog post that explains how to send device-to-device messages on Android using Cloud Messaging, the Realtime Database and a Node.js script on your back-end, app server.