Jaa kautta


Todennuksen käsittely

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 clientApplication arvon, joka on varattu tulevaa käyttöä varten.
  • Kaikki allekirjoitukset hyväksyvät a dataSourcePath :n (jota kutsutaan myös useimmissa näytteissä).resourceUrl
  • Funktio Refresh hyväksyy parametrinoldCredential, joka on record edellisen parametrin, jonka funktiosi FinishLogin palautti (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.