Работа с 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 и для чего используются различные параметры.

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

    снимок экрана настроек приложения Box

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

    Обратите внимание, что ваш URI перенаправления не обязательно должен быть реальным сервером. Например, приложения, использующие WebView, иногда вводят поддельный URL-адрес перенаправления, а затем извлекают код авторизации непосредственно из 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', '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)
Другие вопросы по тегам