2015-11-06 2 views
0

Я пишу приложение, которое напрямую взаимодействует с моей учетной записью Box. Мне нужно выполнить все операции, перечисленные в Python SDK API. Конечно же, я пытаюсь получить часть аутентификации. Учитывая мой client_id и client_secret, у меня есть следующий сценарий:Автоматическая проверка подлинности коробки - Python

#!/usr/bin/env python 
import boxsdk 
import requests 

def store_tokens_callback(access_token, refresh_token): 
    # I don't know why this is never being called. 
    print access_token, refresh_token 

oauth = boxsdk.OAuth2(
    client_id="<my_client_id>", 
    client_secret="<client_secret>", 
    store_tokens=store_tokens_callback, 
) 

auth_url, csrf_token = oauth.get_authorization_url('http://127.0.0.1') 
print auth_url 
print csrf_token 
r = requests.get(auth_url) 
print r.text 
client = boxsdk.Client(oauth) 

я получаю auth_url:

https://app.box.com/api/oauth2/authorize?state=box_csrf_token_<csrf_tken>&response_type=code&client_id=<client_id>&redirect_uri=http%3A%2F%2F127.0.0.1 

Однако, перейдя в этот URL все время не будет делать это. Мне нужен способ автоматизировать этот процесс authentication, так что я не нажимать на эту кнопку каждый раз, когда: enter image description here

Конечно, я мог бы добавить немного Selenium задачу, чтобы нажать на эту кнопку и получить URL с код, однако я искал что-то проще ... между строками. Несколько вопросов:

  • Как можно автоматизировать процесс auth в Box SDK?
  • Почему не stoke_tokens_callback называется?
+0

Я хочу, чтобы понять точку ваших действий, но пока не используется). Что вы пытаетесь сделать? Box - это простое веб-приложение со страницей входа (имя пользователя/пароль), и вы пытаетесь пройти аутентификацию или что? – Andersson

ответ

1

Проверьте enterprise edition documentation, что позволяет вам взаимодействовать только через вызовы API (без необходимости нажатия кнопки).

0

У меня было точно такое же требование. SDK будет обрабатывать обновление токена доступа, когда он истечет, используя токен обновления 60 дней. Обновленный токен также обновляется, то есть он действителен еще на 60 дней. Используя приведенный ниже код, имея первые «загрунтованные» токены доступа и обновления, будет хорошо, если API вызывается не реже одного раза в 60 дней. Следуйте инструкциям Box SDK для получения начального доступа и обновления токенов. Затем вы должны установить эти Python модули:

pip.exe install keyring 
pip.exe install boxsdk 

Затем используют keyring.exe в прайм верительных магазине:

keyring.exe set Box_Auth <AuthKey> 
keyring.exe set Box_Ref <RefreshKey> 

From here:

"""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() 
Смежные вопросы