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
1import urllib, requests, requests.auth
2import os
3
4CLIENT_ID = os.environ.get('CLIENT_ID')
5CLIENT_SECRET = os.environ.get('CLIENT_SECRET')
6
7AUTHORIZE_URL = "https://applications.frame.io/oauth2/auth"
8TOKEN_URL = "https://applications.frame.io/oauth2/token"
9# The scopes you've chosen for your app, space-delimited
10SCOPE = "offline account.read asset.read"
11# The callback URI for your app
12REDIRECT_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
1import uuid
2from urllib.parse import urlencode
3
4def create_auth_url():
5 credentials = {
6 'response_type': 'code',
7 'redirect_uri': REDIRECT_URI,
8 'client_id': CLIENT_ID,
9 'scope': SCOPE,
10 'state': str(uuid.uuid4())
11 }
12 url = (AUTHORIZE_URL + "?" + urlencode(credentials))
13 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
1def callback():
2 state = request.args.get('state')
3 scope = request.args.get('scope')
4 code = request.args.get('code')
5 error = request.args.get('error')
6
7 if error:
8 return "Error: " + error
9
10 # Set up for client authorization and set up the data you need to send.
11 client_auth = requests.auth.HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
12
13 post_data = {
14 "grant_type": "authorization_code",
15 "code": code,
16 "redirect_uri": REDIRECT_URI,
17 "state": state,
18 "scope": SCOPE
19 }
20
21# Send a POST request with the data you need to receive an access token.
22# If everything goes well, it will be returned to you and you can use it with
23# Frame.io.
24
25 response = requests.post(TOKEN_URL, auth=client_auth, data=post_data)
26 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
1def callback():
2 state = request.args.get('state')
3 scope = request.args.get('scope')
4 code = request.args.get('code')
5 error = request.args.get('error')
6
7 if error:
8 return "Error: " + error
9
10# If using PKCE, you must include the CLIENT_ID in your request body
11 post_data = {
12 "grant_type": "authorization_code",
13 "code": code,
14 "redirect_uri": REDIRECT_URI,
15 "state": state,
16 "scope": SCOPE
17 "client_id": CLIENT_ID
18 }
19
20# Send a POST request with the data you need to receive an access token.
21# If everything goes well, it will be returned to you and you can use it with
22# Frame.io
23
24 # If using PKCE, use the below request with no auth
25 response = requests.post(TOKEN_URL, data=post_data)
26
27 return response.text

Réponse réussie

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

1{
2 "access_token":"BEARER_TOKEN",
3 "expires_in":3600,
4 "refresh_token":"REFRESH_TOKEN",
5 "scope":"account.read offline",
6 "token_type":"bearer"
7}

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.