Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Typy overovania
Rozšírenie môže podporovať jeden alebo viac druhov autentifikácie. Každý typ autentifikácie je iný typ poverenia. Autentifikačné UI zobrazované koncovým používateľom v Power Query je riadené typom prihlasovacích údajov, ktoré rozšírenie podporuje.
Zoznam podporovaných typov autentifikacie je definovaný ako súčasť definície druhu zdroja dát rozšírenia. Každá autentifikačná hodnota je záznam so špecifickými poliami. Nasledujúca tabuľka uvádza očakávané polia pre každý druh. Všetky polia sú povinné, pokiaľ nie je označené inak.
| Autentifikačný druh | Field | Popis |
|---|---|---|
| Anonymné | Anonymný (tiež nazývaný Implicit) autentifikačný typ nemá žiadne polia. |
|
| OAuth | StartLogin | Funkcia, ktorá poskytuje URL a informácie o stave na spustenie OAuth toku. Choďte do sekcie Implementácia toku OAuth . |
| FinishLogin | Funkcia, ktorá extrahuje access_token a ďalšie vlastnosti súvisiace s tokom OAuth. | |
| Občerstviť | (voliteľné) Funkcia, ktorá získa nový prístupový token z obnovovacieho tokenu. | |
| Odhlásenie | (voliteľné) Funkcia, ktorá zneplatňuje aktuálny prístupový token používateľa. | |
| Označenie | (voliteľné) Textová hodnota, ktorá vám umožní prepísať predvolený štítok pre tento AuthenticationKind. | |
| Aad | AuthorizationUri |
text hodnotu alebo unárnu funkciu, ktorá vracia autorizačný koncový bod Microsoft Entra ID (príklad: "https://login.microsoftonline.com/common/oauth2/authorize").Choďte do sekcie autentifikácie Microsoft Entra ID . |
| Zdroj |
text hodnotu alebo unárnu funkciu, ktorá vráti hodnotu zdroja Microsoft Entra ID pre vašu službu. |
|
| Scope |
(voliteľné)text hodnotu alebo unárnu funkciu, ktorá vracia zoznam rozsahov (rozsahov) na požiadavku ako súčasť autentifikačného toku. Viaceré hodnoty rozsahu by mali byť oddelené medzerou. Hodnota rozsahu by mala byť názov rozsahu, bez Application ID URI (napríklad: Data.Read). Ak nie je poskytnutý, vyžaduje sa user_impersonation rozsah. |
|
| Používateľské menoHeslo | UsernameLabel | (voliteľné) Textová hodnota, ktorá nahrádza predvolený štítok v textovom poli Používateľské meno v používateľskom rozhraní prihlasovacích údajov. |
| PasswordLabel | (voliteľné) Textová hodnota, ktorá nahradí predvolený štítok v textovom poli Heslo v rozhraní prihlasovacích údajov. | |
| Označenie | (voliteľné) Textová hodnota, ktorá vám umožní prepísať predvolený štítok pre tento AuthenticationKind. | |
| Windows | UsernameLabel | (voliteľné) Textová hodnota, ktorá nahrádza predvolený štítok v textovom poli Používateľské meno v používateľskom rozhraní prihlasovacích údajov. |
| PasswordLabel | (voliteľné) Textová hodnota, ktorá nahradí predvolený štítok v textovom poli Heslo v rozhraní prihlasovacích údajov. | |
| Označenie | (voliteľné) Textová hodnota, ktorá vám umožní prepísať predvolený štítok pre tento AuthenticationKind. | |
| Kľúč | KeyLabel | (voliteľné) Textová hodnota, ktorá nahradí predvolený štítok pre textové pole API kľúča v rozhraní prihlasovacích údajov. |
| Označenie | (voliteľné) Textová hodnota, ktorá vám umožní prepísať predvolený štítok pre tento AuthenticationKind. |
Nasledujúca ukážka ukazuje autentifikačný záznam pre konektor, ktorý podporuje OAuth, Key, Windows, Basic (používateľské meno a heslo) a anonymné prihlasovacie údaje.
Príklad:
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin,
Refresh = Refresh,
Logout = Logout
],
Key = [],
UsernamePassword = [],
Windows = [],
Anonymous = []
]
Prístup k aktuálnym prihlasovacím údajom
Aktuálne prihlasovacie údaje je možné získať pomocou tejto funkcie Extension.CurrentCredential .
M dátových zdrojových funkcií, ktoré boli povolené pre rozšíriteľnosť, automaticky dedí rozsah prihlasovacích údajov vášho rozšírenia. Vo väčšine prípadov nemusíte explicitne pristupovať k aktuálnym prihlasovacím údajom, avšak existujú výnimky, ako napríklad:
- Posielanie prihlasovacích údajov do vlastnej hlavičky alebo parametra dotazového reťazca (napríklad keď používate typ autentifikácie API kľúča).
- Nastavenie vlastností spojovacích reťazcov pre ODBC alebo ADO.NET rozšírenia.
- Kontrola vlastných vlastností na OAuth tokene.
- Používanie prihlasovacích údajov ako súčasť OAuth v1 flow.
Funkcia Extension.CurrentCredential vráti objekt záznamu. Polia, ktoré obsahuje, sú špecifické pre typ autentifikácie. Nasledujúca tabuľka obsahuje podrobnosti.
| Field | Popis | Používa sa |
|---|---|---|
| AuthenticationKind | Obsahuje názov autentifikačného typu priradeného tomuto prihlasovaciemu číslu (UsernamePassword, OAuth a podobne). | Všetko |
| Username | Hodnota používateľského mena | Používateľské menoHeslo, Windows |
| Heslo | Hodnota hesla. Typicky sa používa s UsernamePassword, ale je nastavený aj na Key. | Kľúč, Používateľské menoHeslo, Windows |
| access_token | Hodnota tokenu OAuth. | OAuth |
| Vlastnosti | Záznam obsahujúci ďalšie vlastné vlastnosti pre dané prihlasovacie oprávnenie. Typicky sa používa s OAuth na uloženie iných vlastností (napríklad refresh_token), ktoré sa vrátili spolu s access_token počas autentifikačného procesu. | OAuth |
| Kľúč | Kľúčová hodnota API. Poznámka: kľúčová hodnota je tiež dostupná v poli Heslo. Predvolene mashup engine vkladá tento kľúč do hlavičky autorizácie, akoby táto hodnota bola základným autentifikačným heslom (bez používateľského mena). Ak takéto správanie nie je to, čo chcete, musíte v zázname možností zadať možnosť ManualCredentials = true. | Kľúč |
| EncryptConnection | Logická hodnota, ktorá určovala, či vyžadovať šifrované spojenie so zdrojom dát. Táto hodnota je dostupná pre všetky autentifikačné typy, ale je nastavená len vtedy, ak je v definícii zdroja dát špecifikované EncryptConnection. | Všetko |
Nasledujúca ukážka kódu pristupuje k aktuálnemu prihlasovaciemu kódu API kľúča a používa ho na vyplnenie vlastnej hlavičky (x-APIKey).
Príklad:
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
Implementácia toku OAuth
Typ autentifikácie OAuth umožňuje rozšíreniu implementovať vlastnú logiku pre svoju službu.
Na to rozšírenie poskytuje funkcie pre StartLogin (vrátenie autorizačného URI na spustenie toku OAuth) a FinishLogin (výmena autorizačného kódu za prístupový token). Rozšírenia môžu voliteľne implementovať Refresh funkcie (výmena obnovovacieho tokenu za nový prístupový token) a Logout (expirácia aktuálnych obnovovacích a prístupových tokenov).
Poznámka
Rozšírenia Power Query sa hodnotia v aplikáciách bežiacich na klientskych strojoch. Dátové konektory by nemali používať dôverné tajomstvá vo svojich OAuth tokoch, pretože používatelia môžu skontrolovať rozšírenie alebo sieťovú prevádzku, aby sa dozvedeli tajomstvo. Prejdite na Proof Key for Code Exchange od OAuth Public Clients RFC (známy aj ako PKCE) pre ďalšie informácie o poskytovaní tokov, ktoré nezávisia od zdieľaných tajomstiev. Ukážkovú implementáciu tohto postupu nájdete na našej stránke GitHub.
Existujú dve sady podpisov funkcií OAuth: pôvodný podpis, ktorý obsahuje minimálny počet parametrov, a pokročilý podpis, ktorý prijíma viac parametrov. Väčšinu OAuth tokov je možné implementovať pomocou pôvodných podpisov. Môžete tiež kombinovať typy podpisov vo vašej implementácii. Volania funkcií sú zhody založené na počte parametrov (a ich typoch). Názvy parametrov sa neberú do úvahy.
Viac informácií nájdete na GitHub sample .
Pôvodné OAuth podpisy
StartLogin = (dataSourcePath, state, display) => ...;
FinishLogin = (context, callbackUri, state) => ...;
Refresh = (dataSourcePath, refreshToken) => ...;
Logout = (accessToken) => ...;
Pokročilé OAuth podpisy
Poznámky o pokročilých podpisoch:
- Všetky podpisy akceptujú
clientApplicationhodnotu záznamu, ktorá je vyhradená na budúce použitie. - Všetky podpisy akceptujú (
dataSourcePathresourceUrltiež označované vo väčšine vzoriek). - Funkcia
RefreshprijímaoldCredentialparameter, ktorý je predchádzajúcirecordvrátený vašouFinishLoginfunkciou (alebo predchádzajúcim volaním ).Refresh
StartLogin = (clientApplication, dataSourcePath, state, display) => ...;
FinishLogin = (clientApplication, dataSourcePath, context, callbackUri, state) => ...;
Refresh = (clientApplication, dataSourcePath, oldCredential) => ...;
Logout = (clientApplication, dataSourcePath, accessToken) => ...;
Overenie ID Microsoft Entra
Autentifikačný Aad typ je špecializovaná verzia OAuth pre Microsoft Entra ID. Používa rovnaký Microsoft Entra ID klient ako vstavané konektory Power Query, ktoré podporujú autentifikáciu organizačných účtov. Viac informácií nájdete v príručke Configuring Microsoft Entra pre rýchly štart vlastného konektora .
Poznámka
Ak implementujete vlastný postup OAuth pre Microsoft Entra ID, používatelia, ktorí povolia podmienený prístup pre svojho nájomníka, môžu mať pri obnovovaní pomocou Power BI service problémy. Tento problém nemá vplyv na obnovenie založené na bráne, ale má vplyv na certifikovaný konektor, ktorý podporuje obnovenie z Power BI service. Používatelia môžu naraziť na problém vyplývajúci z toho, že konektor používa verejnú klientskú aplikáciu pri konfigurácii webových prihlasovacích údajov cez službu Power BI. Prístupový token vygenerovaný týmto postupom sa nakoniec použije v inom počítači (t. j. v Power BI service údajovom centre Azure, nie v sieti spoločnosti), než v ktorom bola použitá na pôvodné overenie (teda v počítači používateľa, ktorý konfiguruje poverenia zdroja údajov v sieti spoločnosti). Vstavaný Aad typ obchádza tento problém použitím iného klienta Microsoft Entra ID pri konfigurácii prihlasovacích údajov v službe Power BI. Táto možnosť nie je k dispozícii pre konektory, ktoré používajú OAuth typ overenia.
Väčšina konektorov musí poskytovať hodnoty pre polia AuthorizationUri a Resource . Obe polia môžu byť text hodnoty alebo jedna argumentová funkcia, ktorá vráti .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)
Konektory, ktoré používajú identifikátor založený na URI, nemusia poskytovať hodnotu Resource . Predvolene je hodnota rovná koreňovej ceste parametra Uri konektora.
Ak je zdroj Microsoft Entra ID zdroja údajov odlišný od hodnoty domény (napríklad používa GUID), je potrebné poskytnúť hodnotu.Resource
Aad autentifikačné vzorky druhov
V nasledujúcom prípade dátový zdroj podporuje globálny cloudový Microsoft Entra ID pomocou spoločného tenanta (bez podpory Azure B2B). Požiadavka na .default rozsah vráti token so všetkými predtým autorizovanými rozsahmi pre ID aplikácie klienta 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"
]
]
V nasledujúcom prípade zdroj dát podporuje objavovanie tenantov na základe protokolu OpenID Connect (OIDC) alebo podobného. Táto schopnosť umožňuje konektoru určiť správny Microsoft Entra ID endpoint na použitie na základe jedného alebo viacerých parametrov v ceste zdroja dát. Tento dynamický prístup k objavovaniu umožňuje konektoru podporovať 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"
]
]
Iné typy autentifikácie
Pre informácie o iných typoch autentifikácie, ktoré tento článok nepokrýva, ako je jednotné prihlásenie založené na Kerberose, navštívte článok o dodatočnej funkcionalite konektora , kde sa dozviete viac.