Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Types d’authentification
Une extension peut prendre en charge un ou plusieurs types d’authentification. Chaque méthode d’authentification est un type d’identifiant différent. L’interface utilisateur d’authentification affichée pour les utilisateurs finaux dans Power Query est pilotée par le type d’informations d’identification prises en charge par une extension.
La liste des types d’authentification pris en charge est définie dans le cadre de la définition de type de source de données d’une extension. Chaque valeur d’authentification est un enregistrement avec des champs spécifiques. Le tableau suivant répertorie les champs attendus pour chaque type. Tous les champs sont obligatoires, sauf indication contraire.
| Type d’authentification | Terrain | Descriptif |
|---|---|---|
| Anonyme | Le type d’authentification anonyme (également appelé Implicit) n’a aucun champ. |
|
| OAuth | StartLogin | Fonction qui fournit les informations d’URL et d’état pour démarrer un flux OAuth. Accédez à la section Implémentation d’un flux OAuth . |
| FinishLogin | Fonction qui extrait les access_token et d’autres propriétés associées au flux OAuth. | |
| Actualiser | (facultatif) Fonction qui récupère un nouveau jeton d’accès à partir d’un jeton d’actualisation. | |
| Logout | (facultatif) Fonction qui invalide le jeton d’accès actuel de l’utilisateur. | |
| Étiquette | (facultatif) Valeur de texte qui vous permet de remplacer l’étiquette par défaut de ce AuthenticationKind. | |
| Aad | URI d'autorisation |
text valeur ou fonction unaire qui retourne le point de terminaison d’autorisation Microsoft Entra ID (exemple : "https://login.microsoftonline.com/common/oauth2/authorize").Accédez à la section d’authentification Microsoft Entra ID . |
| Resource |
text valeur ou fonction unaire qui retourne la valeur de ressource Microsoft Entra ID pour votre service. |
|
| Scope |
(facultatif)text valeur ou fonction unaire qui retourne la liste des étendues à demander dans le cadre du flux d’authentification. Plusieurs valeurs d’étendue doivent être séparées par un espace. La valeur de l’étendue doit être le nom de l’étendue, sans URI d’ID d’application (exemple : Data.Read). Lorsqu’elle n’est pas fournie, l’étendue user_impersonation est demandée. |
|
| Nom d'utilisateurMot de passe | Nom d'utilisateur | (facultatif) Valeur de texte permettant de remplacer l’étiquette par défaut de la zone de texte Nom d’utilisateur sur l’interface utilisateur des informations d’identification. |
| Libellé du mot de passe | (facultatif) Valeur de texte permettant de remplacer l’étiquette par défaut de la zone de texte Mot de passe dans l’interface utilisateur des informations d’identification. | |
| Étiquette | (facultatif) Valeur de texte qui vous permet de remplacer l’étiquette par défaut de ce AuthenticationKind. | |
| Fenêtres | Étiquette du nom d'utilisateur | (facultatif) Valeur de texte permettant de remplacer l’étiquette par défaut de la zone de texte Nom d’utilisateur sur l’interface utilisateur des informations d’identification. |
| ÉtiquetteMotDePasse | (facultatif) Valeur de texte permettant de remplacer l’étiquette par défaut de la zone de texte Mot de passe dans l’interface utilisateur des informations d’identification. | |
| Étiquette | (facultatif) Valeur de texte qui vous permet de remplacer l’étiquette par défaut de ce AuthenticationKind. | |
| Key | KeyLabel | (facultatif) Valeur de texte permettant de remplacer l’étiquette par défaut de la zone de texte Clé API dans l’interface utilisateur des informations d’identification. |
| Étiquette | (facultatif) Valeur de texte qui vous permet de remplacer l’étiquette par défaut de ce AuthenticationKind. |
L’exemple suivant montre l’enregistrement d’authentification d’un connecteur prenant en charge OAuth, Key, Windows, Basic (nom d’utilisateur et mot de passe) et les informations d’identification anonymes.
Exemple :
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin,
Refresh = Refresh,
Logout = Logout
],
Key = [],
UsernamePassword = [],
Windows = [],
Anonymous = []
]
Accès aux informations d’identification actuelles
Les informations d’identification actuelles peuvent être récupérées à l’aide de la Extension.CurrentCredential fonction.
Les fonctions de source de données M qui ont été activées pour l'extensibilité héritent automatiquement du domaine d'authentification de votre extension. Dans la plupart des cas, vous n’avez pas besoin d’accéder explicitement aux informations d’identification actuelles, mais il existe des exceptions, telles que :
- Transmission des informations d’identification dans un paramètre de chaîne de requête ou d’en-tête personnalisé (par exemple, lorsque vous utilisez le type d’authentification de clé API).
- Définition des propriétés de chaîne de connexion pour les extensions ODBC ou ADO.NET.
- Vérification des propriétés personnalisées sur un jeton OAuth.
- Utilisation des informations d’identification dans le cadre d’un flux OAuth v1.
La Extension.CurrentCredential fonction retourne un objet d’enregistrement. Les champs qu’il contient sont spécifiques au type d’authentification. Le tableau suivant contient des détails.
| Terrain | Descriptif | Utilisé par |
|---|---|---|
| AuthenticationKind | Contient le nom du type d’authentification affecté à ces informations d’identification (UsernamePassword, OAuth, etc.). | Tous |
| Nom d’utilisateur | Valeur du nom d’utilisateur | Nom d'utilisateurMot de passe, Windows |
| Mot de passe | Valeur du mot de passe. Généralement utilisé avec UsernamePassword, mais il est également défini pour Clé. | Clé, Nom d'utilisateur et mot de passe, Windows |
| jeton d'accès | Valeur du jeton d’accès OAuth. | OAuth |
| Propriétés | Enregistrement contenant d’autres propriétés personnalisées pour des informations d’identification données. Généralement utilisé avec OAuth pour stocker d’autres propriétés (telles que la refresh_token) retournées avec le access_token pendant le flux d’authentification. | OAuth |
| Key | Valeur de clé API. Notez que la valeur de clé est également disponible dans le champ Mot de passe. Par défaut, le moteur mashup insère cette clé dans un en-tête d’autorisation comme si cette valeur était un mot de passe d’authentification de base (sans nom d’utilisateur). Si ce type de comportement n’est pas souhaité, vous devez spécifier l’option ManualCredentials = true dans l’enregistrement d’options. | Key |
| EncryptConnection | Valeur logique qui a déterminé s’il faut exiger une connexion chiffrée à la source de données. Cette valeur est disponible pour tous les types d’authentification, mais elle est définie uniquement si EncryptConnection est spécifié dans la définition de source de données . | Tous |
L’exemple de code suivant accède aux informations d’identification actuelles d’une clé API et l’utilise pour remplir un en-tête personnalisé (x-APIKey).
Exemple :
MyConnector.Raw = (_url as text) as binary =>
let
apiKey = Extension.CurrentCredential()[Key],
headers = [
#"x-APIKey" = apiKey,
Accept = "application/vnd.api+json",
#"Content-Type" = "application/json"
],
request = Web.Contents(_url, [ Headers = headers, ManualCredentials = true ])
in
request
Implémentation d’un flux OAuth
Le type d’authentification OAuth permet à une extension d’implémenter une logique personnalisée pour son service.
Pour ce faire, une extension fournit des fonctions pour StartLogin (renvoyant l’URI d’autorisation pour lancer le flux OAuth) et FinishLogin (échange du code d’autorisation pour un jeton d’accès). Les extensions peuvent éventuellement implémenter Refresh (échange d’un jeton d’actualisation pour un nouveau jeton d’accès) et Logout (expiration des jetons d’actualisation et d’accès actuels) également.
Note
Les extensions Power Query sont évaluées dans les applications s’exécutant sur des ordinateurs clients. Les connecteurs de données ne doivent pas utiliser de secrets confidentiels dans leurs flux OAuth, car les utilisateurs peuvent inspecter l’extension ou le trafic réseau pour apprendre le secret. Accédez à Proof Key for Code Exchange by OAuth Public Clients RFC (également appelé PKCE) pour plus d’informations sur la fourniture de flux qui ne reposent pas sur des secrets partagés. Vous trouverez un exemple d’implémentation de ce flux sur notre site GitHub.
Il existe deux ensembles de signatures de fonction OAuth : la signature d’origine qui contient un nombre minimal de paramètres et une signature avancée qui accepte davantage de paramètres. La plupart des flux OAuth peuvent être implémentés à l’aide des signatures d’origine. Vous pouvez également combiner et mettre en correspondance des types de signature dans votre implémentation. Les appels de fonction sont des correspondances en fonction du nombre de paramètres (et de leurs types). Les noms des paramètres ne sont pas pris en compte.
Pour plus d’informations, accédez à l’exemple GitHub .
Signatures OAuth d’origine
StartLogin = (dataSourcePath, state, display) => ...;
FinishLogin = (context, callbackUri, state) => ...;
Refresh = (dataSourcePath, refreshToken) => ...;
Logout = (accessToken) => ...;
Signatures OAuth avancées
Remarques sur les signatures avancées :
- Toutes les signatures acceptent une valeur d’enregistrement
clientApplication, qui est réservée à une utilisation ultérieure. - Toutes les signatures acceptent un
dataSourcePath(également appeléresourceUrldans la plupart des exemples). - La
Refreshfonction accepte unoldCredentialparamètre, qui est le précédentrecordretourné par votreFinishLoginfonction (ou appel précédent àRefresh).
StartLogin = (clientApplication, dataSourcePath, state, display) => ...;
FinishLogin = (clientApplication, dataSourcePath, context, callbackUri, state) => ...;
Refresh = (clientApplication, dataSourcePath, oldCredential) => ...;
Logout = (clientApplication, dataSourcePath, accessToken) => ...;
Authentification par Microsoft Entra ID
Le Aad type d’authentification est une version spécialisée d’OAuth pour Microsoft Entra ID. Il utilise le même client Microsoft Entra ID que les connecteurs Power Query intégrés qui prennent en charge l’authentification de compte d’organisation. Vous trouverez plus d’informations dans le guide de démarrage rapide Configuration de Microsoft Entra pour un connecteur personnalisé .
Note
Si vous implémentez votre propre flux OAuth pour Microsoft Entra ID, les utilisateurs qui ont activé l’accès conditionnel pour leur locataire peuvent rencontrer des problèmes lors de l’actualisation à l’aide du service Power BI. Cela n’aura pas d’impact sur l’actualisation basée sur la passerelle, mais affecterait un connecteur certifié qui prend en charge l’actualisation à partir du service Power BI. Les utilisateurs peuvent rencontrent un problème lié au connecteur à l’aide d’une application cliente publique lors de la configuration des informations d’identification web via le service Power BI. Le jeton d’accès généré par ce flux sera finalement utilisé sur un autre ordinateur (autrement dit, le service Power BI dans un centre de données Azure, et non sur le réseau de l’entreprise) que celui utilisé pour s’authentifier à l’origine (autrement dit, l’ordinateur de l’utilisateur qui configure les informations d’identification de la source de données sur le réseau de l’entreprise). Le type intégré fonctionne autour de ce problème en Aad utilisant un autre client Microsoft Entra ID lors de la configuration des informations d’identification dans le service Power BI. Cette option ne sera pas disponible pour les connecteurs qui utilisent le OAuth type d’authentification.
La plupart des connecteurs doivent fournir des valeurs pour les champs AuthorizationUri et Resource. Les deux champs peuvent être des valeurs de text, ou une fonction à argument unique qui retourne un text value.
AuthorizationUri = "https://login.microsoftonline.com/common/oauth2/authorize"
AuthorizationUri = (dataSourcePath) => FunctionThatDeterminesAadEndpointFromDataSourcePath(dataSourcePath)
Resource = "44445555-eeee-6666-ffff-7777aaaa8888" // Microsoft Entra ID resource value for your service - Guid or URL
Resource = (dataSourcePath) => FunctionThatDeterminesResourceFromDataSourcePath(dataSourcePath)
Les connecteurs qui utilisent un identificateur basé sur uri n’ont pas besoin de fournir une Resource valeur. Par défaut, la valeur est égale au chemin racine du paramètre Uri du connecteur.
Si la ressource Microsoft Entra ID de la source de données est différente de la valeur de domaine (par exemple, elle utilise un GUID), une Resource valeur doit être fournie.
Exemples de type d’authentification Aad
Dans le cas suivant, la source de données prend en charge l'ID Microsoft Entra global pour le cloud en utilisant le client commun (sans prise en charge d'Azure B2B). La demande de l’étendue .default retourne un jeton avec toutes les étendues précédemment autorisées pour l’ID d’application cliente Power Query.
Authentication = [
Aad = [
AuthorizationUri = "https://login.microsoftonline.com/common/oauth2/authorize",
Resource = "44445555-eeee-6666-ffff-7777aaaa8888", // Entra Application ID URI or app guid
Scope = ".default"
]
]
Dans le cas suivant, la source de données prend en charge la découverte de locataires basée sur OpenID Connect (OIDC) ou un protocole similaire. Cette capacité permet au connecteur de déterminer le point de terminaison d’ID Microsoft Entra approprié à utiliser en fonction d’un ou de plusieurs paramètres dans le chemin de la source de données. Cette approche de découverte dynamique permet au connecteur de prendre en charge Azure B2B.
// Implement this function to retrieve or calculate the service URL based on the data source path parameters
GetServiceRootFromDataSourcePath = (dataSourcePath) as text => ...;
GetAuthorizationUrlFromWwwAuthenticate = (url as text) as text =>
let
// Sending an unauthenticated request to the service returns
// a 302 status with WWW-Authenticate header in the response. The value will
// contain the correct authorization_uri.
//
// Example:
// Bearer authorization_uri="https://login.microsoftonline.com/{tenant_guid}/oauth2/authorize"
responseCodes = {302, 401},
endpointResponse = Web.Contents(url, [
ManualCredentials = true,
ManualStatusHandling = responseCodes
])
in
if (List.Contains(responseCodes, Value.Metadata(endpointResponse)[Response.Status]?)) then
let
headers = Record.FieldOrDefault(Value.Metadata(endpointResponse), "Headers", []),
wwwAuthenticate = Record.FieldOrDefault(headers, "WWW-Authenticate", ""),
split = Text.Split(Text.Trim(wwwAuthenticate), " "),
authorizationUri = List.First(List.Select(split, each Text.Contains(_, "authorization_uri=")), null)
in
if (authorizationUri <> null) then
// Trim and replace the double quotes inserted before the url
Text.Replace(Text.Trim(Text.Trim(Text.AfterDelimiter(authorizationUri, "=")), ","), """", "")
else
error Error.Record("DataSource.Error", "Unexpected WWW-Authenticate header format or value during authentication.", [
#"WWW-Authenticate" = wwwAuthenticate
])
else
error Error.Unexpected("Unexpected response from server during authentication.");
<... snip ...>
Authentication = [
Aad = [
AuthorizationUri = (dataSourcePath) =>
GetAuthorizationUrlFromWwwAuthenticate(
GetServiceRootFromDataSourcePath(dataSourcePath)
),
Resource = "https://myAadResourceValue.com", // Microsoft Entra ID resource value for your service - Guid or URL
Scope = ".default"
]
]
Autres types d’authentification
Pour plus d’informations sur d’autres types d’authentification non abordés dans cet article, tels que l’authentification unique basée sur Kerberos, consultez l’article sur les fonctionnalités de connecteur supplémentaires pour en savoir plus.