A hitelesítés kezelése
Hitelesítési típusok
A bővítmények támogathatnak egy vagy több típusú hitelesítést. Minden hitelesítési típus más típusú hitelesítő adat. A Power Queryben a végfelhasználók számára megjelenített hitelesítési felhasználói felületet a bővítmény által támogatott hitelesítő adatok típusa vezérli.
A támogatott hitelesítési típusok listája a bővítmény adatforrástípus-definíciójának részeként van definiálva. Minden hitelesítési érték egy adott mezőkkel rendelkező rekord. Az alábbi táblázat az egyes típusokhoz tartozó várt mezőket sorolja fel. Az összes mező kötelező, kivéve, ha másként van megjelölve.
Hitelesítési típus | Mező | Leírás |
---|---|---|
Névtelen | A névtelen (más néven Implicit ) hitelesítési típusnak nincs mezője. |
|
OAuth | StartLogin | Az OAuth-folyamat elindításához szükséges URL-címet és állapotinformációt biztosító függvény. Nyissa meg az OAuth Flow implementálási szakaszát . |
FinishLogin | Az OAuth-folyamathoz kapcsolódó access_token és egyéb tulajdonságokat kinyerő függvény. | |
Frissítés | (nem kötelező) Függvény, amely egy új hozzáférési jogkivonatot kér le egy frissítési jogkivonatból. | |
Kijelentkezés | (nem kötelező) A felhasználó aktuális hozzáférési jogkivonatát érvénytelenítő függvény. | |
Címke | (nem kötelező) Szöveges érték, amely lehetővé teszi az AuthenticationKind alapértelmezett címke felülbírálását. | |
Aad | AuthorizationUri | text érték vagy unary függvény, amely a Microsoft Entra ID engedélyezési végpontját adja vissza (például: "https://login.microsoftonline.com/common/oauth2/authorize" ).Nyissa meg a Microsoft Entra ID hitelesítési szakaszt. |
Erőforrás | text érték vagy unary függvény, amely a Szolgáltatás Microsoft Entra-azonosítójának erőforrás-értékét adja vissza. |
|
Hatókör | (nem kötelező) text érték vagy unary függvény, amely a hitelesítési folyamat részeként kérendő hatókör(ek) listáját adja vissza. Több hatókörértéket szóközzel kell elválasztani. A hatókör értékének a hatókör nevének kell lennie, alkalmazásazonosító URI nélkül (például: Data.Read ). Ha nincs megadva, a rendszer kéri a user_impersonation hatókört. |
|
UsernamePassword | UsernameLabel | (nem kötelező) A hitelesítő adatok felhasználói felületén található Felhasználónév szövegmező alapértelmezett címkéjének lecserélésére szolgáló szöveges érték. |
PasswordLabel | (nem kötelező) A hitelesítő adatok felhasználói felületén található Jelszó szövegmező alapértelmezett címkéjének lecserélésére szolgáló szöveges érték. | |
Címke | (nem kötelező) Szöveges érték, amely lehetővé teszi az AuthenticationKind alapértelmezett címke felülbírálását. | |
Windows | UsernameLabel | (nem kötelező) A hitelesítő adatok felhasználói felületén található Felhasználónév szövegmező alapértelmezett címkéjének lecserélésére szolgáló szöveges érték. |
PasswordLabel | (nem kötelező) A hitelesítő adatok felhasználói felületén található Jelszó szövegmező alapértelmezett címkéjének lecserélésére szolgáló szöveges érték. | |
Címke | (nem kötelező) Szöveges érték, amely lehetővé teszi az AuthenticationKind alapértelmezett címke felülbírálását. | |
Kulcs | KeyLabel | (nem kötelező) A hitelesítő adatok felhasználói felületén található API-kulcs szövegmezőjének alapértelmezett címkéjét lecserélő szöveges érték. |
Címke | (nem kötelező) Szöveges érték, amely lehetővé teszi az AuthenticationKind alapértelmezett címke felülbírálását. |
Az alábbi minta egy olyan összekötő hitelesítési rekordját mutatja be, amely támogatja az OAuth, a Kulcs, a Windows, az Alapszintű (Felhasználónév és jelszó) és a Névtelen hitelesítő adatokat.
Példa:
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin,
Refresh = Refresh,
Logout = Logout
],
Key = [],
UsernamePassword = [],
Windows = [],
Anonymous = []
]
Az aktuális hitelesítő adatok elérése
Az aktuális hitelesítő adatok a Extension.CurrentCredential
függvény használatával kérhetők le.
A bővíthetőség érdekében engedélyezett M adatforrásfüggvények automatikusan öröklik a bővítmény hitelesítőadat-hatókörét. A legtöbb esetben nem kell explicit módon hozzáférnie az aktuális hitelesítő adatokhoz, azonban vannak kivételek, például:
- A hitelesítő adatok átadása egyéni fejlécben vagy lekérdezési sztringparaméterben (például az API-kulcs hitelesítési típusának használatakor).
- Az ODBC- vagy ADO.NET-bővítmények kapcsolati sztring tulajdonságainak beállítása.
- Egyéni tulajdonságok ellenőrzése egy OAuth-jogkivonaton.
- A hitelesítő adatok használata egy OAuth v1-folyamat részeként.
A Extension.CurrentCredential
függvény egy rekordobjektumot ad vissza. A benne található mezők hitelesítési típusspecifikusak. Az alábbi táblázat részleteket tartalmaz.
Mező | Leírás | Felhasználta: |
---|---|---|
AuthenticationKind | A hitelesítő adatokhoz (UsernamePassword, OAuth stb.) rendelt hitelesítési típus nevét tartalmazza. | Mind |
Felhasználónév | Felhasználónév értéke | UsernamePassword, Windows |
Jelszó | Jelszóérték. Általában a UsernamePassword-hez használatos, de a Kulcshoz is be van állítva. | Key, UsernamePassword, Windows |
access_token | OAuth hozzáférési jogkivonat értéke. | OAuth |
Tulajdonságok | Egy adott hitelesítő adat egyéb egyéni tulajdonságait tartalmazó rekord. Az OAuth általában a access_token által visszaadott egyéb tulajdonságok (például a refresh_token) tárolására szolgál a hitelesítési folyamat során. | OAuth |
Kulcs | Az API-kulcs értéke. Vegye figyelembe, hogy a kulcs értéke a Jelszó mezőben is elérhető. Alapértelmezés szerint a egyesítési motor úgy szúrja be ezt a kulcsot egy engedélyezési fejlécbe, mintha ez az érték alapszintű hitelesítési jelszó (felhasználónév nélkül). Ha ez a viselkedéstípus nem az, amit szeretne, meg kell adnia a Manuális hitelesítő adatok = igaz beállítást a beállításrekordban. | Kulcs |
EncryptConnection | Logikai érték, amely meghatározta, hogy szükséges-e titkosított kapcsolat az adatforráshoz. Ez az érték minden hitelesítési típushoz elérhető, de csak akkor van beállítva, ha a EncryptConnection az adatforrás definíciójában van megadva. | Mind |
Az alábbi kódminta hozzáfér egy API-kulcs aktuális hitelesítő adataihoz, és azt használja egy egyéni fejléc (x-APIKey
) feltöltéséhez.
Példa:
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-folyamat implementálása
Az OAuth-hitelesítés típusa lehetővé teszi, hogy a bővítmény egyéni logikát implementáljon a szolgáltatáshoz.
Ehhez a bővítmény függvényeket StartLogin
biztosít (az OAuth-folyamat elindításához szükséges engedélyezési URI visszaadása) és FinishLogin
(a hozzáférési jogkivonat engedélyezési kódjának cseréje). A bővítmények igény szerint implementálhatók Refresh
(új hozzáférési jogkivonatok frissítési jogkivonatának cseréje) és Logout
(az aktuális frissítési és hozzáférési jogkivonatok lejárata) is.
Feljegyzés
A Power Query-bővítmények kiértékelése az ügyfélszámítógépeken futó alkalmazásokban történik. Az adatösszekötők nem használhatnak bizalmas titkos kulcsokat az OAuth-folyamatokban, mivel a felhasználók megvizsgálhatják a bővítményt vagy a hálózati forgalmat a titkos kód megismeréséhez. Az OAuth nyilvános ügyfelek RFC-je (más néven PKCE) által használt Kódcsere ellenőrzőkulcsa című témakörben további információt talál a megosztott titkos kódokra nem támaszkodó folyamatok biztosításáról. Ennek a folyamatnak a minta implementációja megtalálható a GitHub-webhelyen.
Az OAuth-függvények aláírásának két halmaza van: az eredeti aláírás, amely minimális számú paramétert tartalmaz, és egy speciális aláírás, amely több paramétert fogad el. A legtöbb OAuth-folyamat az eredeti aláírásokkal implementálható. Az implementációban az aláírástípusok is keverhetők és egyeztethetők. A függvényhívások a paraméterek száma (és típusuk) alapján egyezések. A paraméternevek nem kerülnek figyelembevételre.
További részletekért nyissa meg a GitHub-mintát .
Eredeti OAuth-aláírások
StartLogin = (dataSourcePath, state, display) => ...;
FinishLogin = (context, callbackUri, state) => ...;
Refresh = (dataSourcePath, refreshToken) => ...;
Logout = (accessToken) => ...;
Speciális OAuth-aláírások
Megjegyzések a speciális aláírásokról:
- Minden aláírás elfogad egy rekordértéket
clientApplication
, amely későbbi használatra van fenntartva. - Minden aláírás elfogad egy
dataSourcePath
(más néven aresourceUrl
legtöbb mintában). - A
Refresh
függvény elfogad egy paramétertoldCredential
, amely a függvény által visszaadott (record
vagy az előző hívás)Refresh
általFinishLogin
visszaadott paraméter.
StartLogin = (clientApplication, dataSourcePath, state, display) => ...;
FinishLogin = (clientApplication, dataSourcePath, context, callbackUri, state) => ...;
Refresh = (clientApplication, dataSourcePath, oldCredential) => ...;
Logout = (clientApplication, dataSourcePath, accessToken) => ...;
Microsoft Entra ID-hitelesítés
A Aad
hitelesítési típus a Microsoft Entra ID OAuth speciális verziója. Ugyanazt a Microsoft Entra ID-ügyfelet használja, mint a szervezeti fiókhitelesítést támogató beépített Power Query-összekötők. További információkért tekintse meg a Microsoft Entra egyéni összekötőkhöz való konfigurálását ismertető rövid útmutatót.
Feljegyzés
Ha saját OAuth-folyamatot implementál a Microsoft Entra-azonosítóhoz, azok a felhasználók, akik engedélyezték a feltételes hozzáférést a bérlőjük számára, problémákat tapasztalhatnak a Power BI szolgáltatás használatával történő frissítéskor. Ez nem befolyásolja az átjáróalapú frissítést, de hatással lenne egy hitelesített összekötőre, amely támogatja a Power BI szolgáltatás frissítését. A felhasználók a webes hitelesítő adatok Power BI szolgáltatás keresztüli konfigurálásakor előfordulhatnak, hogy az összekötőből eredő probléma egy nyilvános ügyfélalkalmazás használatával jelentkezik. A folyamat által létrehozott hozzáférési jogkivonatot végső soron egy másik számítógépen (azaz egy Azure-adatközpontban lévő Power BI szolgáltatás, nem a vállalat hálózatán) fogja használni, mint az eredeti hitelesítéshez használt (vagyis az adatforrás hitelesítő adatait a vállalat hálózatán konfiguráló felhasználó számítógépén). A beépített Aad
típus egy másik Microsoft Entra ID-ügyfél használatával oldja meg ezt a problémát, amikor hitelesítő adatokat konfigurál a Power BI szolgáltatás. Ez a beállítás nem érhető el a OAuth
hitelesítési típust használó összekötők számára.
A legtöbb összekötőnek meg kell adnia a mezők és Resource
a mezők értékeitAuthorizationUri
. Mindkét mező lehet text
érték, vagy egyetlen argumentumfüggvény, amely egy text value
értéket ad vissza.
AuthorizationUri = "https://login.microsoftonline.com/common/oauth2/authorize"
AuthorizationUri = (dataSourcePath) => FunctionThatDeterminesAadEndpointFromDataSourcePath(dataSourcePath)
Resource = "77256ee0-fe79-11ea-adc1-0242ac120002" // Microsoft Entra ID resource value for your service - Guid or URL
Resource = (dataSourcePath) => FunctionThatDeterminesResourceFromDataSourcePath(dataSourcePath)
Az Uri-alapú azonosítót használó összekötőknek nem kell értéket megadniukResource
. Alapértelmezés szerint az érték megegyezik az összekötő Uri paraméterének gyökérútvonalával.
Ha az adatforrás Microsoft Entra-azonosító erőforrása eltér a tartományértékétől (például GUID-t használ), akkor meg kell adni egy Resource
értéket.
Aad-hitelesítési típusú minták
Az alábbi esetben az adatforrás a microsoft entra-azonosító globális felhőbeli azonosítóját támogatja a közös bérlő használatával (nincs Azure B2B-támogatás). Az alapértelmezett hatókör kérése egy jogkivonatot ad vissza a Power Query-ügyfélalkalmazás-azonosító összes korábban engedélyezett hatókörével.
Authentication = [
Aad = [
AuthorizationUri = "https://login.microsoftonline.com/common/oauth2/authorize",
Resource = "77256ee0-fe79-11ea-adc1-0242ac120002", // Entra Application ID URI or app guid
Scope = ".default"
]
]
Az alábbi esetben az adatforrás az OpenID Connect (OIDC) vagy hasonló protokoll alapján támogatja a bérlőfelderítést. Ez a képesség lehetővé teszi az összekötő számára, hogy az adatforrás elérési útjának egy vagy több paramétere alapján meghatározza a megfelelő Microsoft Entra ID-végpontot. Ez a dinamikus felderítési módszer lehetővé teszi, hogy az összekötő támogassa az 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"
]
]
Egyéb típusú hitelesítés
Az ebben a cikkben nem szereplő más típusú hitelesítésről, például a Kerberos-alapú egyszeri bejelentkezésről további információt az összekötők további funkcióiról szóló cikkben talál.