Работа с 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 перенаправления установлен в
Обратите внимание, что ваш URI перенаправления не должен быть реальным сервером. Например, приложения, использующие WebView, иногда вводят поддельный URL-адрес перенаправления, а затем извлекают код auth непосредственно из URL-адреса в WebView.https://myhost.com, то ваш сервер получит запрос с URL, который выглядит примерно какhttps://myhost.com?code=123456abcdef.Обратный вызов
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', '[email protected]') refresh_token = keyring.get_password('Box_Refresh', '[email protected]') 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', '[email protected]', access_token) keyring.set_password('Box_Refresh', '[email protected]', 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)

Comments