Les utilisateurs doivent autoriser les projets de script qui accèdent à leurs données ou agissent en leur nom. Pour obtenir une présentation générale de ce processus, consultez Autorisation pour les services Google. Lorsqu'un utilisateur exécute un script qui nécessite une autorisation pour la première fois, l'interface utilisateur affiche une invite pour démarrer le flux d'autorisation.
Au cours de ce flux, l'interface utilisateur indique aux utilisateurs les autorisations demandées par le script. Par exemple, un script peut demander l'autorisation de lire des e-mails ou de créer des événements d'agenda. Le projet de script définit ces autorisations individuelles en tant que champs d'application OAuth.
Pour la plupart des scripts, Apps Script détecte automatiquement les champs d'application requis. Vous pouvez afficher les champs d'application utilisés par un script à tout moment. Vous pouvez également définir explicitement des champs d'application dans votre fichier manifeste à l'aide de chaînes d'URL. Les applications publiées, telles que les modules complémentaires, doivent utiliser les champs d'application les plus étroits possible.
Lors du flux d'autorisation, Apps Script présente des descriptions lisibles des champs d'application requis. Par exemple, si votre script a besoin d'un accès en lecture seule aux feuilles de calcul, le fichier manifeste peut inclure le champ d'application https://www.googleapis.com/auth/spreadsheets.readonly. L'invite d'autorisation demande à l'utilisateur d'afficher ses feuilles de calcul Google.
Certains champs d'application en incluent d'autres. Par exemple, l'accès autorisé à https://www.googleapis.com/auth/spreadsheets permet d'accéder aux feuilles de calcul en lecture et en écriture.
Pour certaines surfaces, telles que l'IDE Apps Script, les utilisateurs voient l'écran de consentement OAuth détaillé. Cet écran permet aux utilisateurs de sélectionner des autorisations spécifiques à accorder plutôt que d'accorder toutes les autorisations en même temps. Concevez votre script pour qu'il gère les autorisations OAuth détaillées.
Afficher les champs d'application
Pour afficher les champs d'application requis par votre projet de script :
- Ouvrez le projet de script.
- À gauche, cliquez sur Aperçu .
- Affichez les champs d'application sous Champs d'application OAuth du projet.
Définir des champs d'application explicites
Apps Script détermine automatiquement les champs d'application requis en analysant le code pour les appels de fonction. Bien que cela soit suffisant pour la plupart des scripts, vous devez exercer un contrôle plus direct pour les modules complémentaires, les applications Web, les applications Chat et les appels à l'API Chat publiés.
Apps Script attribue parfois automatiquement des champs d'application permissifs. Cela peut signifier que votre script demande aux utilisateurs plus d'accès que nécessaire. Pour les scripts publiés, remplacez les champs d'application larges par un ensemble limité qui couvre les besoins du script.
Vous pouvez définir explicitement les champs d'application utilisés par votre projet de script en modifiant son
fichier manifeste. Le champ de fichier manifeste oauthScopes est un tableau de champs d'application utilisés par le projet. Pour définir les champs d'application de votre projet :
- Ouvrez le projet de script.
- À gauche, cliquez sur Paramètres du projet .
- Cochez la case Afficher le fichier manifeste "appsscript.json" dans l'éditeur.
- À gauche, cliquez sur Éditeur .
- À gauche, cliquez sur le fichier
appsscript.json. - Recherchez le champ de premier niveau libellé
oauthScopes. S'il n'est pas présent, vous pouvez l'ajouter. - Remplacez le contenu du tableau
oauthScopespar les champs d'application que vous souhaitez que le projet utilise. Exemple :{ ... "oauthScopes": [ "https://www.googleapis.com/auth/spreadsheets.readonly", "https://www.googleapis.com/auth/userinfo.email" ], ... } - En haut, cliquez sur Enregistrer .
Gérer les autorisations OAuth détaillées
L'écran de consentement OAuth détaillé a d'abord été lancé dans l'IDE Apps Script pour les utilisateurs exécutant un script directement. L'écran de consentement est progressivement déployé sur d'autres surfaces, telles que les macros, les déclencheurs et les modules complémentaires. Pour en savoir plus, consultez Le consentement OAuth pour les exécutions dans l'IDE Google Apps Script devient granulaire.
L'écran de consentement OAuth détaillé permet aux utilisateurs d'indiquer les champs d'application OAuth individuels qu'ils souhaitent autoriser. Les utilisateurs peuvent ainsi contrôler précisément les données de compte qu'ils partagent avec chaque script. Par exemple, si un script demande des champs d'application pour les e-mails et l'agenda, les utilisateurs peuvent choisir d'accorder l'autorisation Agenda, mais pas Gmail.
Les sections suivantes décrivent comment gérer les autorisations OAuth détaillées.
Exiger automatiquement une autorisation pour les champs d'application nécessaires
Si un flux d'exécution nécessite des champs d'application spécifiques, vous pouvez demander aux utilisateurs d'accorder ces autorisations. Votre script peut vérifier les autorisations et les demander automatiquement si elles sont manquantes.
Les méthodes suivantes de la classe
ScriptAppvalident
les autorisations et affichent l'invite d'autorisation :
requireScopes(authMode, oAuthScopes): utilisez cette méthode pour les flux qui dépendent de champs d'application spécifiques.requireAllScopes(authMode): utilisez cette méthode si un flux d'exécution dépend de tous les champs d'application du projet.
Exemple
L'exemple suivant montre comment appeler requireScopes() et requireAllScopes(). Le script utilise des champs d'application pour Gmail, Sheets et Agenda. La fonction sendEmail() ne nécessite que les champs d'application pour Gmail et Sheets, tandis que la fonction createEventSendEmail() nécessite tous les champs d'application utilisés par le script.
// This function requires the Gmail and Sheets scopes.
function sendEmail() {
// Validates that the user has granted permission for the Gmail and Sheets scopes.
// If not, the execution ends and prompts the user for authorization.
ScriptApp.requireScopes(ScriptApp.AuthMode.FULL, [
'https://mail.google.com/',
'https://www.googleapis.com/auth/spreadsheets'
]);
// Sends an email.
GmailApp.sendEmail("dana@example.com", "Subject", "Body");
Logger.log("Email sent successfully!");
// Opens a spreadsheet and sheet to track the sent email.
const ss = SpreadsheetApp.openById("abc1234567");
const sheet = ss.getSheetByName("Email Tracker")
// Gets the last row of the sheet.
const lastRow = sheet.getLastRow();
// Adds "Sent" to column E of the last row of the spreadsheet.
sheet.getRange(lastRow, 5).setValue("Sent");
Logger.log("Sheet updated successfully!");
}
// This function requires all scopes used by the script (Gmail,
// Calendar, and Sheets).
function createEventSendEmail() {
// Validates that the user has granted permission for all scopes used by the
// script. If not, the execution ends and prompts the user for authorization.
ScriptApp.requireAllScopes(ScriptApp.AuthMode.FULL);
// Creates an event.
CalendarApp.getDefaultCalendar().createEvent(
"Meeting",
new Date("November 28, 2024 10:00:00"),
new Date("November 28, 2024 11:00:00")
);
Logger.log("Calendar event created successfully!");
// Sends an email.
GmailApp.sendEmail("dana@example.com", "Subject 2", "Body 2");
Logger.log("Email sent successfully!");
// Opens a spreadsheet and sheet to track the created meeting and sent email.
const ss = SpreadsheetApp.openById("abc1234567");
const sheet = ss.getSheetByName("Email and Meeting Tracker")
// Gets the last row
const lastRow = sheet.getLastRow();
// Adds "Sent" to column E of the last row
sheet.getRange(lastRow, 5).setValue("Sent");
// Adds "Meeting created" to column F of the last row
sheet.getRange(lastRow, 6).setValue("Meeting created");
Logger.log("Sheet updated successfully!");
}
Créer une expérience personnalisée pour les champs d'application manquants
Vous pouvez récupérer l'état des autorisations des utilisateurs et concevoir des expériences personnalisées. Par exemple, vous pouvez désactiver les fonctionnalités qui nécessitent des autorisations manquantes ou afficher une boîte de dialogue expliquant l'exigence. Les méthodes suivantes récupèrent un objet contenant les informations d'autorisation de l'utilisateur, y compris les champs d'application que l'utilisateur a autorisés et une URL permettant de demander les champs d'application manquants :
getAuthorizationInfo(authMode, oAuthScopes): vérifie l'état des autorisations pour des champs d'application spécifiques.getAuthorizationInfo(authMode): vérifie l'état des autorisations pour tous les champs d'application du projet.
Pour obtenir les détails des autorisations à partir de l'objet d'informations d'autorisation, tels que la
liste des champs d'application autorisés et l'URL permettant de demander les autorisations manquantes, utilisez les
méthodes de la
AuthorizationInfo classe.
Exemple
L'exemple suivant montre comment utiliser getAuthorizationInfo() pour ignorer les fonctionnalités pour lesquelles les utilisateurs n'ont pas accordé les champs d'application requis. Le reste du flux d'exécution peut ainsi se poursuivre sans demander l'autorisation des champs d'application manquants.
// This function uses the Gmail scope and skips the email
// capabilities if the scope for Gmail hasn't been granted.
function myFunction() {
const authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL, ['https://mail.google.com/']);
if (authInfo.getAuthorizationStatus() === ScriptApp.AuthorizationStatus.NOT_REQUIRED) {
GmailApp.sendEmail("dana@example.com", "Subject", "Body");
Logger.log("Email sent successfully!");
} else {
const scopesGranted = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL).getAuthorizedScopes();
console.warn(`Authorized scopes: ${scopesGranted} not enough to send mail, skipping.`);
}
// Continue the rest of the execution flow...
}
S'assurer que les exécutions de déclencheurs disposent d'autorisations
Les fonctions associées aux déclencheurs s'exécutent automatiquement, et les utilisateurs ne sont peut-être pas présents pour fournir des autorisations. Nous vous recommandons d'utiliser
requireScopes(authMode, oAuthScopes)
avant d'installer un déclencheur. Cela invite l'utilisateur à fournir les autorisations manquantes et n'autorise pas l'installation du déclencheur sans elles.
Exemple
// This function requires scope Sheets.
function trackFormSubmissions(e){
// Opens a spreadsheet to track the sent email.
const ss = SpreadsheetApp.openById("abc1234567");
const sheet = ss.getSheetByName("Submission Tracker")
// Gets the last row of the sheet.
const lastRow = sheet.getLastRow();
// Adds email address of user that submitted the form
// to column E of the last row of the spreadsheet.
sheet.getRange(lastRow, 5).setValue(e.name);
Logger.log("Sheet updated successfully!");
}
function installTrigger(){
// Validates that the user has granted permissions for trigger
// installation and execution. If not, trigger doesn't get
// installed and prompts the user for authorization.
ScriptApp.requireScopes(ScriptApp.AuthMode.FULL, [
'https://www.googleapis.com/auth/script.scriptapp',
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/forms.currentonly'
]);
ScriptApp.newTrigger('trackFormSubmission')
.forForm(FormApp.getActiveForm())
.onFormSubmit()
.create();
}
Validation OAuth
Certains champs d'application OAuth sont sensibles , car ils permettent d'accéder aux données utilisateur Google. Si votre projet de script utilise des champs d'application qui permettent d'accéder aux données utilisateur, il doit passer par la validation du client OAuth avant de pouvoir le publier publiquement en tant qu'application Web ou module complémentaire. Pour en savoir plus, consultez les guides suivants :
- Validation du client OAuth pour Apps Script
- Applications non validées
- Questions fréquentes sur la validation OAuth
- Règlement relatif aux données utilisateur dans les services d'API Google
Champs d'application restreints
En plus des champs d'application sensibles, certains champs d'application sont classés comme restreints et soumis à des règles supplémentaires qui permettent de protéger les données utilisateur. Si vous publiez une application qui utilise des champs d'application restreints, elle doit respecter toutes les spécifications.
Consultez la liste complète des champs d'application restreints avant de publier. Les applications conformes doivent respecter les Exigences supplémentaires pour les champs d'application d'API spécifiques.
Évitez d'utiliser des champs d'application restreints si possible pour simplifier le processus de validation. Vous pouvez utiliser librement des champs d'application restreints pour les applications non publiques.