Passer à la navigation

Créer une app OAuth 2

Ce guide suppose que vous avez déjà enregistré une app OAuth 2

Si ce n’est pas le cas, consultez Flux de code OAuth 2 pour configurer votre application.

Bases de l’application

Remarque : vous devez stocker votre client_id et (si vous n’utilisez pas PKCE) client_secret en toute sécurité et y accéder via votre environnement. Les exemples ci-dessous supposent la présence d’un fichier .env contenant les variables CLIENT_ID et CLIENT_SECRET.

Python
import urllib, requests, requests.auth
import os
CLIENT_ID = os.environ.get('CLIENT_ID')
CLIENT_SECRET = os.environ.get('CLIENT_SECRET')
AUTHORIZE_URL = "https://applications.frame.io/oauth2/auth"
TOKEN_URL = "https://applications.frame.io/oauth2/token"
# The scopes you've chosen for your app, space-delimited
SCOPE = "offline account.read asset.read"
# The callback URI for your app
REDIRECT_URI = "https://yourapp.domain/callback"

Invoquer le serveur d’authentification

D’abord, votre application devra appeler le serveur d’authentification Frame.io, qui redirigera ensuite l’utilisateur vers une page de connexion.

Python
import uuid
from urllib.parse import urlencode
def create_auth_url():
credentials = {
'response_type': 'code',
'redirect_uri': REDIRECT_URI,
'client_id': CLIENT_ID,
'scope': SCOPE,
'state': str(uuid.uuid4())
}
url = (AUTHORIZE_URL + "?" + urlencode(credentials))
return url

Le rappel

Le serveur d’authentification effectuera ensuite une requête GET vers votre REDIRECT_URI, qui devra à son tour appeler le TOKEN_URL. Ce rappel sera légèrement différent selon que votre application soit configurée ou non pour utiliser PKCE.

Sans PKCE

Si vous n’utilisez pas PKCE, votre rappel doit inclure un en-tête Authorization qui comprend votre CLIENT_ID et CLIENT_SECRET.

Python
def callback():
state = request.args.get('state')
scope = request.args.get('scope')
code = request.args.get('code')
error = request.args.get('error')
if error:
return "Error: " + error
# Set up for client authorization and set up the data you need to send.
client_auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
post_data = {
"grant_type": "authorization_code",
"code": code,
"redirect_uri": REDIRECT_URI,
"state": state,
"scope": SCOPE
}
# Send a POST request with the data you need to receive an access token.
# If everything goes well, it will be returned to you and you can use it with
# Frame.io.
response = requests.post(TOKEN_URL, auth=client_auth, data=post_data)
return response.text

Avec PKCE

Si vous utilisez PKCE, votre rappel ne doit pas inclure d’en-tête Authorization, mais doit inclure votre CLIENT_ID dans le corps de sa requête POST lors du rappel vers le TOKEN_URL.

Python
def callback():
state = request.args.get('state')
scope = request.args.get('scope')
code = request.args.get('code')
error = request.args.get('error')
if error:
return "Error: " + error
# If using PKCE, you must include the CLIENT_ID in your request body
post_data = {
"grant_type": "authorization_code",
"code": code,
"redirect_uri": REDIRECT_URI,
"state": state,
"scope": SCOPE
"client_id": CLIENT_ID
}
# Send a POST request with the data you need to receive an access token.
# If everything goes well, it will be returned to you and you can use it with
# Frame.io
# If using PKCE, use the below request with no auth
response = requests.post(TOKEN_URL, data=post_data)
return response.text

Réponse réussie

Si votre rappel réussit, vous recevrez une réponse JSON qui ressemble à ceci :

{
"access_token":"BEARER_TOKEN",
"expires_in":3600,
"refresh_token":"REFRESH_TOKEN",
"scope":"account.read offline",
"token_type":"bearer"
}

Vous pouvez maintenant utiliser l’access_token pour effectuer des appels API vers Frame.io au nom de l’utilisateur connecté, et le refresh_token pour demander un nouvel access_token après l’expiration de ce jeton.