2016-05-26 2 views
1

Я создаю инструмент командной строки, используя python, который взаимодействует с RESTful api. Для аутентификации API использует oauth2. Вместо запроса access_token каждый раз, когда пользователь запускает инструмент python. Могу ли я сохранить access_token каким-то образом, чтобы я мог использовать его до его срока службы? Если это так, то насколько это безопасно.Можно ли хранить токен аутентификации в отдельном файле?

ответ

1

Вы можете сохранить токен доступа в файле на рабочем столе своего пользователя.

Вы можете сделать это с помощью хранилища. Предполагая, что вы используете oauth2client:

# Reading credentials 
store = oauth2client.file.Storage(cred_path) 
credentials = store.get() 

# Writing credentials 
creds = client.AccessTokenCredentials(access_token, user_agent) 
creds.access_token = access_token 
creds.refresh_token = refresh_token 
creds.client_id = client_id 
creds.client_secret = client_secret 

# For some reason it does not save all the credentials, 
# so write them to a json file manually instead 
with open(credential_path, "w") as f: 
    f.write(creds.to_json) 

С точки зрения безопасности, я бы не видеть большую угрозу здесь, поскольку эти маркеры доступа будет на рабочем столе пользователя. Если кто-то хочет получить свой токен доступа, им необходимо будет иметь доступ на чтение к этому файлу за этот временной интервал. Однако, если они уже могут это сделать, они, скорее всего, также смогут использовать ваш скрипт для отправки им копии токена доступа пользователя при каждом его аутентификации. Но возьми мое слово легко, поскольку я не профессионал в этой области. См. information security stack exchange.

post в обмене информации стеки безопасности действительно говорил об этом:

этих жетоны дают доступ к некоторой довольно конфиденциальной информации о пользователях.

Однако вопрос был адресован базе данных.

В заключение вы можете получить сохранить его в файле. (Но возьмите мое слово с солью)

1

Вы хотите сохранить его на сервисной стороне или на месте?

Поскольку ваш инструмент интерфейсов API RESTful, который является апатридом, что означает, что между различными запросами API не хранится никакой информации, вам фактически необходимо предоставить токен доступа каждый раз, когда ваш клиент обращается к любой из конечных точек REST. Возможно, мне не хватает некоторых деталей в вашем дизайне, но токены доступа должны использоваться только для авторизации, так как ваш пользователь уже прошел аутентификацию, если у него есть токен. Вот почему токены действительны только в течение определенного времени, обычно 1 час.

Таким образом, вам необходимо предоставить состояние либо с помощью файла cookie (веб-интерфейса), либо локального локального хранилища (это то, что вы имели в виду). Тем не менее, вы должны запускать весь поток oauth каждый раз, когда пользователь входит в систему к вашему клиенту (аутентификация пользователя и предоставление нового токена аутентификации), иначе вы не будете использовать преимущества oauth.

Смежные вопросы