Работа с 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?

422   3  

3 ответов:

Я предлагаю взглянуть на учебник OAuth 2. Это поможет лучше понять, как работает OAuth и для чего используются различные параметры.

  1. URL-адрес перенаправления задается в настройках Вашего приложения Box:

    скриншот окна настроек приложения

    Это URL-адрес, по которому Box отправляет код авторизации, который можно использовать для получения маркера доступа. Например, если Ваш URL перенаправления установлен в https://myhost.com, то ваш сервер получит запрос с URL, который выглядит примерно как https://myhost.com?code=123456abcdef.

    Обратите внимание, что ваш URI перенаправления не должен быть реальным сервером. Например, приложения, использующие WebView, иногда вводят поддельный URL-адрес перенаправления, а затем извлекают код auth непосредственно из URL-адреса в WebView.
  2. Обратный вызов store_tokens необязателен, но его можно использовать для сохранения маркеров доступа и обновления в случае, если приложение должно завершиться. Он будет вызываться каждый раз, когда маркер доступа и маркер обновления изменяются, давая у вас есть возможность сохранить их куда-нибудь (на диск, БД и т.д.).).

    Затем вы можете передать эти маркеры своему конструкторуOAuth2 позже, чтобы пользователям не нужно было снова входить в систему.

  1. URL-адрес перенаправления требуется только в том случае, если вы запускаете веб-приложение, которое должно отвечать на запросы пользователя для проверки подлинности. Если вы программно аутентифицируетесь, вы можете просто установить это как http://localhost . В случае, когда требуется вручную выполнить проверку подлинности пользователя, URL-адрес перенаправления должен вызывать некоторую функцию в веб-приложении для хранения и обработки возвращенного кода проверки подлинности. Вам нужен работающий сервер? Ну, если вы хотите что-то сделать с возвращенный код аутентификации, указанный вами URL должен находиться под вашим контролем и вызывать код, чтобы сделать что-то полезное.

  2. Вот пример того, как должна выглядеть функция 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

    Ничего не найдено.