С целью изучения конечных точек я создаю приложение под названием «Где вы?». Приложение позволяет пользователям запрашивать местоположение других пользователей. Идея заключается в том, что она делает это, позволяя пользователю выбрать контакт, найти контакт по номеру телефона в моей конечной точке. Если найдено, это означает, что у контакта есть приложение, и GCM отправляется с запросом местоположения. Если контакт не найден, сообщение отправляется с URL-адресом, который запрашивает местоположение через браузер, выполняет http-сообщение указанного местоположения и возвращает сервер GCM обратно лицу, запрашивающему местоположение.Каков наилучший способ аутентификации, идентификации и хранения деликатной информации о пользователях?
Мне нужно проверить подлинность пользователей приложения и сохранить номера телефонов нескольких контактов, а также пользователей приложения. На данный момент я в основном сосредоточусь на стороне сервера.
Как я могу архивировать вышеуказанное безопасным образом?
До сих пор я включил OAuth 2.0 для своего API и передал user_required=True
в качестве аргумента для моего декоратора Model.method
. Результирующий код:
from google.appengine.ext import endpoints
from google.appengine.ext import ndb
from protorpc import remote
from endpoints_proto_datastore.ndb import EndpointsModel
class User(EndpointsModel):
owner = ndb.UserProperty()
phone_number = ndb.StringProperty()
reg_id = ndb.StringProperty()
created = ndb.DateTimeProperty(auto_now_add=True)
@endpoints.api(name='whereareyoudroid', version='v1',
description='Where Are You Users')
class UserApi(remote.Service):
@User.method(user_required=True,
response_fields=('id',),
path='user')
def insert(self, user):
user.owner = endpoints.get_current_user()
user.put()
return user
@User.method(user_required=True,
request_fields=('id',),
path='user/{id}',
http_method='GET')
def get(self, user):
if not user.from_datastore:
raise endpoints.NotFoundException('User not found.')
return user
Но для приведенного выше кода требуется действительная учетная запись gmail. Я думаю, что вы можете получить доступ к пользователю, если у вас уже есть номер телефона? Какой будет случай, если я ограничу поля ответов в методе get, чтобы исключить номер телефона ... если кто-то не решит переустановить службу. Предложения? Комментарии?
От this Полагаю, что я могу настроить свою конечную точку только для приема запросов из моих приложений. Это правильно? И если да, не мог ли кто-то извлечь информацию о потребности из apk или изменить ее для выполнения ... зла? :)
Update:
делает запрос на месте Б
Querys конечных точек по телефону если не найден просто отправить запрос за SMS , если найден ... перейти к 2 ,
Запрос направляется в GAE приложения
Это делается путем вставки Расположение конечной точки whoes идентификатор является UUID и посылает GCM к B о запросе
GAE приложение проверяет, что секрет ID A является на белом списке Б
Там нет БелОГо и секрета идентификатора является UUID так что этот шаг устраняется
Кроме того, приложение запрашивает для размещения Б
Если B решает предоставить доступ к его местоположение B просто обновляет Расположение конечной точки на основе UUID
Как только приложение получает эту информацию, а затем проверяет, что он только посылает эту информацию пользователя, идентифицированного A секретного ID
Когда B обновляет это место GAE посылает GCM-а информируя об обновлении
Информационных затем надежно отправленных на клиент а в
Done! GCM и SMS (и HTTPS) можно считать безопасными ... правильно?
Обновление: GCM не является безопасным ... но действительно ли это так важно?
из вашего описания, это не звучит, как есть любой вид контроля доступа, то есть, если я знаю, что чье-то имя и посмотреть свой номер телефона, я может запрашивать, где они находятся, пока у меня есть учетная запись (вам нравится, что я делаю t шляпа или нет). Если это так, я бы не стал беспокоиться о безопасности OAuth, это достаточно хорошо (потому что проблема безопасности в другом месте). Если вы только забыли упомянуть эту деталь, мои извинения. В этом случае я бы лично аутентифицировал пользователей с помощью криптографии с открытым ключом, так как это самый безопасный способ (...) – Damon
(...), хотя OAuth «достаточно хорош» для миллионов людей, но мне лично не нравится идея отдать безопасность какой-то неизвестной другой стороне (что в основном вы делаете). Хэшированные пароли все более и более хлопотны, и такие вещи, как bcrypt, на самом деле не так эффективны (по сравнению с затратами). Генерирование открытого ключа из секретного ключа (хешированный пароль, если хотите) достаточно эффективен (думаю, кривая25519), и его нужно делать редко. Открытый ключ, хранящийся в вашей базе данных, бесполезен, даже если он просочился/украден, и в отличие от хэша не тривиально грубого принуждения. – Damon
Не будет паролей, поскольку я намерен выполнить авторизацию с помощью Google ... по крайней мере, это то, что я думаю. – user672009