Muistiinpano
Tälle sivulle pääsy edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoja.
Tälle sivulle pääsy edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoja.
Todennuslajit
Laajennus voi tukea yhtä tai useampaa tunnistautumistyyppiä. Jokainen todennustyyppi on erilainen tunnistetieto. Power Queryssä loppukäyttäjille näytettävä todennuskäyttöliittymä perustuu laajennuksen tukemien tunnisteiden tyyppiin.
Tuetut todennustyypit määritellään osana laajennuksen Data Source Kind -määritelmää. Jokainen autentikointiarvo on tietue, jossa on tietyt kentät. Seuraava taulukko listaa odotetut kentät kullekin lajille. Kaikki kentät ovat pakollisia, ellei toisin merkitty.
| Autentikointityyppi | Field | Kuvaus |
|---|---|---|
| Anonyymi | Anonyymi (tunnetaan myös Implicitnimellä ) autentikointityyppi ei sisällä kenttiä. |
|
| OAuth | StartLogin | Funktio, joka tarjoaa URL- ja tilatiedot OAuth-työnkulun käynnistämiseksi. Mene kohtaan Implementation an OAuth Flow -osio. |
| FinishLogin | Funktio, joka erottaa access_token ja muita OAuth-virtaan liittyviä ominaisuuksia. | |
| Refresh | (valinnainen) Funktio, joka hakee uuden pääsytunnuksen virkistystokenista. | |
| Uloskirjaus | (valinnainen) Funktio, joka mitätöi käyttäjän nykyisen käyttöoikeustunnuksen. | |
| Etiketti | (valinnainen) Tekstiarvo, jonka avulla voit ohittaa tämän AuthenticationKindin oletustunnisteen. | |
| Aad | AuthorizationUri |
text arvo tai unary-funktio, joka palauttaa Microsoft Entra ID:n valtuutuspäätepisteen (esim. "https://login.microsoftonline.com/common/oauth2/authorize").Mene Microsoft Entra ID -tunnistautumisosioon . |
| Resurssi |
text arvo tai unary-funktio, joka palauttaa Microsoft Entra ID -resurssiarvon palvelullesi. |
|
| Laajuus |
(valinnainen)text arvo tai unary-funktio, joka palauttaa listan pyynnöistä osana todennusprosessia. Useat skooppiarvot tulisi erottaa välilyönnillä. Scope-arvon tulisi olla scope-nimi, ilman Application ID URI:tä (esim. Data.Read). Kun sitä ei ole annettu, laajuutta user_impersonation pyydetään. |
|
| Käyttäjätunnus Salasana | Käyttäjätunnus | (valinnainen) Tekstiarvo, joka korvaa käyttäjätunnuksen tekstikentän oletustunnisteen käyttäjätunnuksen käyttöliittymässä. |
| PasswordLabel | (valinnainen) Tekstiarvo, joka korvaa salasana-tekstikentän oletusetiketin tunnistetietojen käyttöliittymässä. | |
| Etiketti | (valinnainen) Tekstiarvo, jonka avulla voit ohittaa tämän AuthenticationKindin oletustunnisteen. | |
| Windows | Käyttäjätunnus | (valinnainen) Tekstiarvo, joka korvaa käyttäjätunnuksen tekstikentän oletustunnisteen käyttäjätunnuksen käyttöliittymässä. |
| PasswordLabel | (valinnainen) Tekstiarvo, joka korvaa salasana-tekstikentän oletusetiketin tunnistetietojen käyttöliittymässä. | |
| Etiketti | (valinnainen) Tekstiarvo, jonka avulla voit ohittaa tämän AuthenticationKindin oletustunnisteen. | |
| Avain | KeyLabel | (valinnainen) Tekstiarvo, joka korvaa API-avaimen tekstikentän oletusetiketin tunnistetietojen käyttöliittymässä. |
| Etiketti | (valinnainen) Tekstiarvo, jonka avulla voit ohittaa tämän AuthenticationKindin oletustunnisteen. |
Seuraava esimerkki näyttää liittimen Authentication -tietueen, joka tukee OAuth-, Avain-, Windows-, Basic- (Käyttäjätunnus ja Salasana) sekä Anonymous-tunnuksia.
Esimerkki:
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin,
Refresh = Refresh,
Logout = Logout
],
Key = [],
UsernamePassword = [],
Windows = [],
Anonymous = []
]
Nykyisten tunnistetietojen käyttö
Nykyiset tunnukset voidaan hakea funktion Extension.CurrentCredential avulla.
M-tietolähdefunktiot, jotka on otettu käyttöön laajennettavuutta varten, perivät automaattisesti laajennuksesi tunnistelaajuuden. Useimmissa tapauksissa sinun ei tarvitse käyttää nimenomaisesti nykyisiä tunnuksia, mutta poikkeuksia on, kuten:
- Syöttää tunnistetiedot mukautettuna otsikkona tai kyselymerkkijonon parametrina (esimerkiksi kun käytät API-avaimen tunnistustyyppiä).
- Yhteysmerkkijonon ominaisuuksien asettaminen ODBC- tai ADO.NET-laajennuksille.
- Mukautettujen ominaisuuksien tarkistaminen OAuth-tokenilla.
- Käytän tunnistetietoja osana OAuth v1 -prosessia.
Funktio Extension.CurrentCredential palauttaa tietueen objektin. Sen sisältämät kentät ovat todennustyyppikohtaisia. Seuraava taulukko sisältää yksityiskohtia.
| Field | Kuvaus | Käyttäjä |
|---|---|---|
| AuthenticationKind | Sisältää tunnistautumistyypin nimen, joka on annettu tälle tunnistetunnisteelle (Käyttäjätunnus, salasana, OAuth jne.). | Kaikki |
| Käyttäjänimi | Käyttäjätunnuksen arvo | KäyttäjätunnusSalasana, Windows |
| Salasana | Salasanan arvo. Käytetään tyypillisesti käyttäjätunnuksen kanssa, mutta se on myös asetettu avaimelle. | Avain, käyttäjätunnus Salasana, Windows |
| access_token | OAuth access token-arvo. | OAuth |
| Ominaisuudet | Tietue, joka sisältää muita mukautettuja ominaisuuksia tietylle tunnisteelle. Käytetään tyypillisesti OAuthin kanssa tallentamaan muita ominaisuuksia (kuten refresh_token), jotka palautuvat access_token mukana autentikointiprosessin aikana. | OAuth |
| Avain | API-avaimen arvo. Huomaa, että avainarvo löytyy myös Password-kentästä. Oletuksena mashup-moottori sijoittaa tämän avaimen valtuutusotsikoon ikään kuin tämä arvo olisi perustunnistautumissalasana (ilman käyttäjätunnusta). Jos tällainen toiminta ei ole sitä, mitä haluat, sinun täytyy määrittää ManualCredentials = true -vaihtoehto asetuksissa. | Avain |
| EncryptConnection | Looginen arvo, joka määritti, vaaditaanko salattu yhteys tietolähteeseen. Tämä arvo on käytettävissä kaikille autentikointityypeille, mutta se asetetaan vain, jos EncryptConnection on määritelty tietolähteen määritelmässä. | Kaikki |
Seuraava koodinäyte käyttää API-avaimen nykyistä tunnistetta ja käyttää sitä mukautetun otsikon (x-APIKey).
Esimerkki:
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
OAuth-virran toteuttaminen
OAuth-todennustyyppi mahdollistaa laajennuksen toteuttaa mukautetun logiikan palvelulleen.
Tätä varten laajennus tarjoaa toimintoja StartLogin (palauttaa valtuutus-URI:n OAuth-työnkulun käynnistämiseksi) ja FinishLogin (valtuutuskoodin vaihtaminen pääsytunteeseen). Laajennukset voivat myös valinnaisesti toteuttaa Refresh (vaihtaa päivitystokenin uuteen pääsytokeniin) ja Logout (nykyisten päivitys- ja käyttötokenien vanhenemisen) toimintoja.
Note
Power Query -laajennuksia arvioidaan sovelluksissa, jotka toimivat asiakaskoneilla. Data Connectorien ei tulisi käyttää luottamuksellisia salaisuuksia OAuth-virroissaan, sillä käyttäjät voivat tarkastaa laajennuksen tai verkkoliikenteen oppiakseen salaisuuden. Mene osoitteeseen Proof Key for Code Exchange by OAuth Public Clients RFC (tunnetaan myös nimellä PKCE) saadaksesi lisätietoja siitä, miten tarjota flow-toimintoja, jotka eivät perustu jaettuihin salaisuuksiin. Tämän prosessin esimerkkitoteutus löytyy GitHub-sivustoltamme.
OAuth-funktioiden allekirjoituksia on kaksi joukkoa: alkuperäinen allekirjoitus, joka sisältää minimimäärän parametreja, ja edistynyt allekirjoitus, joka hyväksyy enemmän parametreja. Useimmat OAuth-virrat voidaan toteuttaa alkuperäisillä allekirjoituksilla. Voit myös yhdistellä allekirjoitustyyppejä toteutuksessasi. Funktiokutsut ovat vastaavuutta parametrien määrän (ja niiden tyyppien) perusteella. Parametrien nimiä ei oteta huomioon.
Katso lisätietoja GitHub-näytteeltä .
Alkuperäiset OAuthin allekirjoitukset
StartLogin = (dataSourcePath, state, display) => ...;
FinishLogin = (context, callbackUri, state) => ...;
Refresh = (dataSourcePath, refreshToken) => ...;
Logout = (accessToken) => ...;
Edistyneet OAuth-allekirjoitukset
Huomautuksia edistyneistä allekirjoituksista:
- Kaikki allekirjoitukset hyväksyvät tietueen
clientApplicationarvon, joka on varattu tulevaa käyttöä varten. - Kaikki allekirjoitukset hyväksyvät a
dataSourcePath:n (jota kutsutaan myös useimmissa näytteissä).resourceUrl - Funktio
Refreshhyväksyy parametrinoldCredential, joka onrecordedellisen parametrin, jonka funktiosiFinishLoginpalautti (tai edellisen kutsun ).Refresh
StartLogin = (clientApplication, dataSourcePath, state, display) => ...;
FinishLogin = (clientApplication, dataSourcePath, context, callbackUri, state) => ...;
Refresh = (clientApplication, dataSourcePath, oldCredential) => ...;
Logout = (clientApplication, dataSourcePath, accessToken) => ...;
Microsoft Entra ID -todennus
Todennustyyppi Aad on erikoistunut versio OAuthista Microsoft Entra ID:lle. Se käyttää samaa Microsoft Entra ID -asiakasohjelmaa kuin sisäänrakennetut Power Query -liittimet, jotka tukevat organisaation tilin tunnistautumista. Lisätietoja löytyy Microsoft Entran konfigurointi -oppaasta, joka tarjoaa räätälöidyn liittimen pikakäynnistysoppaan.
Note
Jos toteutat oman OAuth-työnkulun Microsoft Entra ID:lle, käyttäjät, jotka ovat ottaneet ehdollisen pääsyn käyttöön vuokralaiselleen, saattavat kohdata ongelmia Power BI -palvelun päivityksessä. Tämä ei vaikuta yhdyskäytäväpohjaiseen virkistykseen, mutta vaikuttaa sertifioituun liittimeen, joka tukee Power BI -palvelun päivitystä. Käyttäjät saattavat kohdata ongelman, joka johtuu liittimestä julkisen asiakasohjelman avulla, kun verkkopohjaisia tunnuksia konfiguroidaan Power BI -palvelun kautta. Tämän kulun tuottama pääsytunnus käytetään lopulta eri tietokoneella (eli Power BI -palvelussa Azure-datakeskuksessa, ei yrityksen verkossa) kuin alkuperäisessä todennuskäytössä (eli käyttäjän tietokoneessa, joka konfiguroi datalähteen tunnukset yrityksen verkossa). Sisäänrakennettu Aad tyyppi kiertää tämän ongelman käyttämällä eri Microsoft Entra ID -asiakasohjelmaa Power BI -palvelun tunnuksia konfiguroidessa. Tämä vaihtoehto ei ole saatavilla liittimille, jotka käyttävät tunnistautumistyyppiä OAuth .
Useimpien liittimien täytyy antaa arvot AuthorizationUri ja-kentille Resource . Molemmat kentät voivat olla text arvoja tai yksittäisiä argumenttifunktioita, jotka palauttavat .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)
Liittimien, jotka käyttävät URI-pohjaista tunnistetta , ei tarvitse antaa Resource arvoa. Oletuksena arvo on yhtä suuri kuin liittimen Uri-parametrin juuripolku.
Jos tietolähteen Microsoft Entra ID -resurssi poikkeaa toimialueen arvosta (esimerkiksi se käyttää GUID:tä), täytyy antaa arvo Resource .
Aad autentikointityyppisiä näytteitä
Seuraavassa tapauksessa tietolähde tukee globaalia pilvepalvelua Microsoft Entra ID:tä käyttäen yhteistä vuokralaista (ei Azure B2B -tukea). . default-scope-tiedoston pyytäminen palauttaa tokenin, jossa on kaikki aiemmin valtuutetut Power Query -sovellustunnuksen laajuudet.
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"
]
]
Seuraavassa tapauksessa tietolähde tukee vuokralaisten etsintää OpenID Connect (OIDC) -protokollan tai vastaavan protokollan perusteella. Tämä ominaisuus mahdollistaa liittimelle oikean Microsoft Entra ID -päätepisteen määrittämisen yhden tai useamman parametrin perusteella tietolähteen polussa. Tämä dynaaminen löytömenetelmä mahdollistaa liittimen tukea Azure B2B:tä.
// 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"
]
]
Muut tunnistautumisen tyypit
Lisätietoja muista tunnistautumistyypeistä, joita tässä artikkelissa ei käsitellä, kuten Kerberos-pohjaisesta kertakirjautumisesta, löydät lisäliittimen toiminnallisuusartikkelista saadaksesi lisätietoja.