Работа с Box.com SDK для Python
Я пытаюсь начать работу с Box.com SDK, и у меня есть несколько вопросов.
from boxsdk import OAuth2
oauth = OAuth2(
client_id='YOUR_CLIENT_ID',
client_secret='YOUR_CLIENT_SECRET',
store_tokens=your_store_tokens_callback_method,
)
auth_url, csrf_token = oauth.get_authorization_url('http://YOUR_REDIRECT_URL')
def store_tokens(access_token, refresh_token):
# store the tokens at secure storage (e.g. Keychain)
1) Что такое URL перенаправления и как его использовать? Нужно ли иметь запущенный сервер, чтобы использовать это?
2) Какой код мне нужен в методе store_tokens?
3 ответа
Я предлагаю взглянуть на учебник OAuth 2. Это поможет лучше понять, как работает OAuth и для чего используются различные параметры.
URL перенаправления устанавливается в настройках вашего приложения Box:
Это URL, по которому Box отправит код авторизации, который можно использовать для получения токена доступа. Например, если ваш URL перенаправления установлен на
https://myhost.com
тогда ваш сервер получит запрос с URL, который выглядит примерно такhttps://myhost.com?code=123456abcdef
,Обратите внимание, что ваш URI перенаправления не обязательно должен быть реальным сервером. Например, приложения, использующие WebView, иногда вводят поддельный URL-адрес перенаправления, а затем извлекают код авторизации непосредственно из URL-адреса в WebView.
store_tokens
обратный вызов не является обязательным, но его можно использовать для сохранения маркеров доступа и обновления в случае, если ваше приложение должно быть закрыто. Он будет вызываться каждый раз при изменении токена доступа и обновлении токена, давая вам возможность сохранить их где-нибудь (на диск, в БД и т. Д.).Затем вы можете передать эти токены своему конструктору OAuth2 позже, чтобы вашим пользователям не нужно было снова входить в систему.
URL перенаправления требуется только в том случае, если вы запускаете веб-приложение, которое должно отвечать на запросы пользователя для аутентификации. Если вы программно аутентифицируетесь, вы можете просто установить это как http://localhost/. В сценарии, когда требуется, чтобы пользователь проходил аутентификацию вручную, URL-адрес перенаправления должен вызывать некоторую функцию в вашем веб-приложении для хранения и обработки возвращенного кода аутентификации. Вам нужен работающий сервер? Что ж, если вы хотите что-то сделать с возвращенным кодом аутентификации, указанный вами URL-адрес должен быть под вашим контролем и вызывать код, чтобы сделать что-то полезное.
Вот пример того, что
store_tokens
функция должна выглядеть так. Следует принять два параметра,access_token
а такжеrefresh_token
, В приведенном ниже примере функция передаст их в локальное хранилище для использования, когда API потребуется повторная аутентификация:
"""An example of Box authentication with external store"""
import keyring
from boxsdk import OAuth2
from boxsdk import Client
CLIENT_ID = 'specify your Box client_id here'
CLIENT_SECRET = 'specify your Box client_secret here'
def read_tokens():
"""Reads authorisation tokens from keyring"""
# Use keyring to read the tokens
auth_token = keyring.get_password('Box_Auth', 'mybox@box.com')
refresh_token = keyring.get_password('Box_Refresh', 'mybox@box.com')
return auth_token, refresh_token
def store_tokens(access_token, refresh_token):
"""Callback function when Box SDK refreshes tokens"""
# Use keyring to store the tokens
keyring.set_password('Box_Auth', 'mybox@box.com', access_token)
keyring.set_password('Box_Refresh', 'mybox@box.com', refresh_token)
def main():
"""Authentication against Box Example"""
# Retrieve tokens from secure store
access_token, refresh_token = read_tokens()
# Set up authorisation using the tokens we've retrieved
oauth = OAuth2(
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
access_token=access_token,
refresh_token=refresh_token,
store_tokens=store_tokens,
)
# Create the SDK client
client = Client(oauth)
# Get current user details and display
current_user = client.user(user_id='me').get()
print('Box User:', current_user.name)
if __name__ == '__main__':
main()
Если вы просто тестируете, вы также можете передать маркер разработчика. Этот урок объясняет как.
Это самый простой пример, который работал для меня:
from boxsdk import Client, OAuth2
CLIENT_ID = ''
CLIENT_SECRET = ''
ACCESS_TOKEN = '' # this is the developer token
oauth2 = OAuth2(CLIENT_ID, CLIENT_SECRET, access_token=ACCESS_TOKEN)
client = Client(oauth2)
my = client.user(user_id='me').get()
print(my.name)
print(my.login)
print(my.avatar_url)