Σημείωση
Η πρόσβαση σε αυτή τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να συνδεθείτε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτή τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Είδη ελέγχου ταυτότητας
Μια επέκταση μπορεί να υποστηρίξει ένα ή περισσότερα είδη ελέγχου ταυτότητας. Κάθε είδος ελέγχου ταυτότητας είναι διαφορετικός τύπος διαπιστευτηρίων. Το περιβάλλον εργασίας χρήστη ελέγχου ταυτότητας που εμφανίζεται στους τελικούς χρήστες στο Power Query καθοδηγείται από τον τύπο των διαπιστευτηρίων που υποστηρίζει μια επέκταση.
Η λίστα των υποστηριζόμενων τύπων ελέγχου ταυτότητας ορίζεται ως μέρος του ορισμού του είδους προέλευσης δεδομένων μιας επέκτασης. Κάθε τιμή ελέγχου ταυτότητας είναι μια εγγραφή με συγκεκριμένα πεδία. Ο παρακάτω πίνακας παραθέτει τα αναμενόμενα πεδία για κάθε είδος. Όλα τα πεδία είναι υποχρεωτικά, εκτός εάν επισημαίνεται διαφορετικά.
| Είδος ελέγχου ταυτότητας | Πεδίο | Περιγραφή |
|---|---|---|
| Ανώνυμος | Το είδος ελέγχου ταυτότητας Ανώνυμος (ονομάζεται Implicitεπίσης ) δεν έχει πεδία. |
|
| OAuth | ΈναρξηΣύνδεση | Συνάρτηση που παρέχει τη διεύθυνση URL και τις πληροφορίες κατάστασης για την έναρξη μιας ροής OAuth. Μεταβείτε στην ενότητα Υλοποίηση ροής OAuth . |
| FinishLogin | Συνάρτηση που εξάγει το access_token και άλλες ιδιότητες που σχετίζονται με τη ροή OAuth. | |
| Refresh | (προαιρετικός) Συνάρτηση που ανακτά ένα νέο διακριτικό πρόσβασης από ένα διακριτικό ανανέωσης. | |
| Αποσύνδεση | (προαιρετικός) Λειτουργία που ακυρώνει το τρέχον διακριτικό πρόσβασης του χρήστη. | |
| Ετικέτα | (προαιρετικός) Μια τιμή κειμένου που σας επιτρέπει να παρακάμψετε την προεπιλεγμένη ετικέτα για αυτό το AuthenticationKind. | |
| Άαντ | ΕξουσιοδότησηUri |
text τιμή ή μοναδιαία συνάρτηση που επιστρέφει το τελικό σημείο εξουσιοδότησης Microsoft Entra ID (παράδειγμα: "https://login.microsoftonline.com/common/oauth2/authorize").Μεταβείτε στην ενότητα Έλεγχος ταυτότητας Microsoft Entra ID . |
| Πόρο |
text τιμή ή μοναδιαία συνάρτηση που επιστρέφει την τιμή πόρου Microsoft Entra ID για την υπηρεσία σας. |
|
| Εμβέλεια |
(προαιρετικός)text τιμή ή μοναδιαία συνάρτηση που επιστρέφει τη λίστα των πεδίων για αίτηση ως μέρος της ροής ελέγχου ταυτότητας. Οι πολλαπλές τιμές εύρους πρέπει να διαχωρίζονται με ένα κενό. Η τιμή εμβέλειας θα πρέπει να είναι το όνομα εμβέλειας, χωρίς URI αναγνωριστικού εφαρμογής (παράδειγμα: Data.Read). Όταν δεν παρέχεται, ζητείται το user_impersonation πεδίο εφαρμογής. |
|
| Όνομα χρήστηΚωδικός πρόσβασης | Όνομα χρήστηΕτικέτα | (προαιρετικός) Μια τιμή κειμένου για την αντικατάσταση της προεπιλεγμένης ετικέτας για το πλαίσιο κειμένου Όνομα χρήστη στο περιβάλλον εργασίας χρήστη διαπιστευτηρίων. |
| Ετικέτα κωδικού πρόσβασης | (προαιρετικός) Μια τιμή κειμένου για την αντικατάσταση της προεπιλεγμένης ετικέτας για το πλαίσιο κειμένου "Κωδικός πρόσβασης " στο περιβάλλον εργασίας χρήστη διαπιστευτηρίων. | |
| Ετικέτα | (προαιρετικός) Μια τιμή κειμένου που σας επιτρέπει να παρακάμψετε την προεπιλεγμένη ετικέτα για αυτό το AuthenticationKind. | |
| Windows | Όνομα χρήστηΕτικέτα | (προαιρετικός) Μια τιμή κειμένου για την αντικατάσταση της προεπιλεγμένης ετικέτας για το πλαίσιο κειμένου Όνομα χρήστη στο περιβάλλον εργασίας χρήστη διαπιστευτηρίων. |
| Ετικέτα κωδικού πρόσβασης | (προαιρετικός) Μια τιμή κειμένου για την αντικατάσταση της προεπιλεγμένης ετικέτας για το πλαίσιο κειμένου "Κωδικός πρόσβασης " στο περιβάλλον εργασίας χρήστη διαπιστευτηρίων. | |
| Ετικέτα | (προαιρετικός) Μια τιμή κειμένου που σας επιτρέπει να παρακάμψετε την προεπιλεγμένη ετικέτα για αυτό το AuthenticationKind. | |
| Κλειδί | Ετικέτα κλειδιού | (προαιρετικός) Μια τιμή κειμένου για την αντικατάσταση της προεπιλεγμένης ετικέτας για το πλαίσιο κειμένου API Key στο περιβάλλον εργασίας χρήστη διαπιστευτηρίων. |
| Ετικέτα | (προαιρετικός) Μια τιμή κειμένου που σας επιτρέπει να παρακάμψετε την προεπιλεγμένη ετικέτα για αυτό το AuthenticationKind. |
Το παρακάτω δείγμα εμφανίζει την καρτέλα ελέγχου ταυτότητας για μια σύνδεση που υποστηρίζει διαπιστευτήρια OAuth, Key, Windows, Basic (όνομα χρήστη και κωδικός πρόσβασης) και Anonymous.
Παράδειγμα:
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin,
Refresh = Refresh,
Logout = Logout
],
Key = [],
UsernamePassword = [],
Windows = [],
Anonymous = []
]
Πρόσβαση στα τρέχοντα διαπιστευτήρια
Τα τρέχοντα διαπιστευτήρια μπορούν να ανακτηθούν χρησιμοποιώντας τη Extension.CurrentCredential συνάρτηση.
Οι συναρτήσεις πηγής δεδομένων M που έχουν ενεργοποιηθεί για επεκτασιμότητα κληρονομούν αυτόματα το εύρος διαπιστευτηρίων της επέκτασής σας. Στις περισσότερες περιπτώσεις, δεν χρειάζεται να έχετε ρητή πρόσβαση στα τρέχοντα διαπιστευτήρια, ωστόσο, υπάρχουν εξαιρέσεις, όπως:
- Μεταβίβαση των διαπιστευτηρίων σε μια προσαρμοσμένη παράμετρο κεφαλίδας ή συμβολοσειράς ερωτήματος (όπως όταν χρησιμοποιείτε τον τύπο ελέγχου ταυτότητας κλειδιού API).
- Ορισμός ιδιοτήτων συμβολοσειράς σύνδεσης για επεκτάσεις ODBC ή ADO.NET.
- Έλεγχος προσαρμοσμένων ιδιοτήτων σε ένα διακριτικό OAuth.
- Χρήση των διαπιστευτηρίων ως μέρος μιας ροής OAuth v1.
Η Extension.CurrentCredential συνάρτηση επιστρέφει ένα αντικείμενο εγγραφής. Τα πεδία που περιέχει είναι συγκεκριμένος τύπος ελέγχου ταυτότητας. Ο παρακάτω πίνακας περιέχει λεπτομέρειες.
| Πεδίο | Περιγραφή | Χρησιμοποιείται από |
|---|---|---|
| AuthenticationKind (Είδος ελέγχου ταυτότητας) | Περιέχει το όνομα του είδους ελέγχου ταυτότητας που έχει εκχωρηθεί σε αυτό το διαπιστευτήριο (UsernamePassword, OAuth κ.ο.κ.). | Όλες |
| Username | Τιμή ονόματος χρήστη | Όνομα χρήστηΚωδικός πρόσβασης, Windows |
| Κωδικός πρόσβασης | Τιμή κωδικού πρόσβασης. Συνήθως χρησιμοποιείται με το UsernamePassword, αλλά έχει οριστεί και για το Key. | Κλειδί, Όνομα χρήστηΚωδικός πρόσβασης, Windows |
| access_token | Τιμή διακριτικού πρόσβασης OAuth. | OAuth |
| Ιδιότητες | Μια εγγραφή που περιέχει άλλες προσαρμοσμένες ιδιότητες για ένα δεδομένο διαπιστευτήριο. Συνήθως χρησιμοποιείται με το OAuth για την αποθήκευση άλλων ιδιοτήτων (όπως το refresh_token) που επιστρέφονται με το access_token κατά τη ροή ελέγχου ταυτότητας. | OAuth |
| Κλειδί | Η τιμή του κλειδιού API. Σημειώστε ότι η τιμή του κλειδιού είναι επίσης διαθέσιμη στο πεδίο Κωδικός πρόσβασης. Από προεπιλογή, ο μηχανισμός συνδυασμού δεδομένων εισάγει αυτό το κλειδί σε μια κεφαλίδα εξουσιοδότησης σαν αυτή η τιμή να ήταν ένας βασικός κωδικός πρόσβασης ελέγχου ταυτότητας (χωρίς όνομα χρήστη). Εάν αυτός ο τύπος συμπεριφοράς δεν είναι αυτό που θέλετε, πρέπει να καθορίσετε την επιλογή ManualCredentials = true στην καρτέλα επιλογών. | Κλειδί |
| ΚρυπτογράφησηΣύνδεση | Μια λογική τιμή που καθορίζει εάν θα απαιτείται κρυπτογραφημένη σύνδεση με την προέλευση δεδομένων. Αυτή η τιμή είναι διαθέσιμη για όλα τα είδη ελέγχου ταυτότητας, αλλά ορίζεται μόνο εάν το EncryptConnection έχει καθοριστεί στον ορισμό της πηγής δεδομένων . | Όλες |
Το παρακάτω δείγμα κώδικα αποκτά πρόσβαση στα τρέχοντα διαπιστευτήρια για ένα κλειδί API και τα χρησιμοποιεί για να συμπληρώσει μια προσαρμοσμένη κεφαλίδα (x-APIKey).
Παράδειγμα:
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
Ο τύπος ελέγχου ταυτότητας OAuth επιτρέπει σε μια επέκταση να υλοποιήσει προσαρμοσμένη λογική για την υπηρεσία της.
Για να γίνει αυτό, μια επέκταση παρέχει λειτουργίες για StartLogin (επιστροφή του URI εξουσιοδότησης για την εκκίνηση της ροής OAuth) και FinishLogin (ανταλλαγή του κωδικού εξουσιοδότησης για ένα διακριτικό πρόσβασης). Οι επεκτάσεις μπορούν προαιρετικά να υλοποιήσουν Refresh επίσης λειτουργίες (ανταλλαγή διακριτικού ανανέωσης με νέο διακριτικό πρόσβασης) και Logout (λήξη των τρεχόντων διακριτικών ανανέωσης και πρόσβασης).
Σημείωση
Οι επεκτάσεις Power Query αξιολογούνται σε εφαρμογές που εκτελούνται σε υπολογιστές-πελάτες. Οι συνδέσεις δεδομένων δεν πρέπει να χρησιμοποιούν εμπιστευτικά μυστικά στις ροές OAuth τους, καθώς οι χρήστες μπορούν να επιθεωρήσουν την επέκταση ή την κυκλοφορία δικτύου για να μάθουν το μυστικό. Μεταβείτε στο Proof Key for Code Exchange by OAuth Public Clients RFC (γνωστό και ως PKCE) για περισσότερες λεπτομέρειες σχετικά με την παροχή ροών που δεν βασίζονται σε κοινόχρηστα μυστικά. Μπορείτε να βρείτε ένα δείγμα υλοποίησης αυτής της ροής στον ιστότοπό μας στο GitHub.
Υπάρχουν δύο σύνολα υπογραφών συναρτήσεων OAuth: η αρχική υπογραφή που περιέχει έναν ελάχιστο αριθμό παραμέτρων και μια προηγμένη υπογραφή που δέχεται περισσότερες παραμέτρους. Οι περισσότερες ροές OAuth μπορούν να υλοποιηθούν χρησιμοποιώντας τις αρχικές υπογραφές. Μπορείτε επίσης να συνδυάσετε και να ταιριάξετε τύπους υπογραφής στην υλοποίησή σας. Οι κλήσεις συναρτήσεων είναι αντιστοιχίσεις με βάση τον αριθμό των παραμέτρων (και τους τύπους τους). Τα ονόματα των παραμέτρων δεν λαμβάνονται υπόψη.
Μεταβείτε στο δείγμα GitHub για περισσότερες λεπτομέρειες.
Πρωτότυπες υπογραφές OAuth
StartLogin = (dataSourcePath, state, display) => ...;
FinishLogin = (context, callbackUri, state) => ...;
Refresh = (dataSourcePath, refreshToken) => ...;
Logout = (accessToken) => ...;
Προηγμένες υπογραφές OAuth
Σημειώσεις σχετικά με τις προηγμένες υπογραφές:
- Όλες οι υπογραφές δέχονται μια
clientApplicationτιμή εγγραφής, η οποία δεσμεύεται για μελλοντική χρήση. - Όλες οι υπογραφές δέχονται α
dataSourcePath(αναφέρεται επίσης όπωςresourceUrlστα περισσότερα δείγματα). - Η
Refreshσυνάρτηση δέχεται μιαoldCredentialπαράμετρο, η οποία είναι η προηγούμενηrecordπου επιστρέφεται από τη συνάρτησή σαςFinishLogin(ή την προηγούμενη κλήση στοRefresh).
StartLogin = (clientApplication, dataSourcePath, state, display) => ...;
FinishLogin = (clientApplication, dataSourcePath, context, callbackUri, state) => ...;
Refresh = (clientApplication, dataSourcePath, oldCredential) => ...;
Logout = (clientApplication, dataSourcePath, accessToken) => ...;
Έλεγχος ταυτότητας αναγνωριστικού Microsoft Entra
Το Aad είδος ελέγχου ταυτότητας είναι μια εξειδικευμένη έκδοση του OAuth για Microsoft Entra ID. Χρησιμοποιεί το ίδιο πρόγραμμα-πελάτη Microsoft Entra ID με τις ενσωματωμένες συνδέσεις Power Query που υποστηρίζουν τον έλεγχο ταυτότητας εταιρικού λογαριασμού. Μπορείτε να βρείτε περισσότερες πληροφορίες στον οδηγό γρήγορης εκκίνησης Ρύθμιση παραμέτρων του Microsoft Entra για μια προσαρμοσμένη σύνδεση .
Σημείωση
Εάν υλοποιήσετε τη δική σας ροή OAuth για το Microsoft Entra ID, οι χρήστες που έχουν ενεργοποιήσει την πρόσβαση υπό όρους για τον μισθωτή τους ενδέχεται να αντιμετωπίσουν προβλήματα κατά την ανανέωση χρησιμοποιώντας την υπηρεσία Power BI. Αυτό δεν θα επηρεάσει την ανανέωση που βασίζεται σε πύλη, αλλά θα επηρεάσει μια πιστοποιημένη σύνδεση που υποστηρίζει ανανέωση από την υπηρεσία Power BI. Οι χρήστες ενδέχεται να αντιμετωπίσουν ένα πρόβλημα που προκύπτει από τη σύνδεση χρησιμοποιώντας μια δημόσια εφαρμογή προγράμματος-πελάτη κατά τη ρύθμιση παραμέτρων διαπιστευτηρίων που βασίζονται στο web μέσω της υπηρεσίας Power BI. Το διακριτικό πρόσβασης που δημιουργείται από αυτήν τη ροή θα χρησιμοποιηθεί τελικά σε διαφορετικό υπολογιστή (δηλαδή, στην υπηρεσία Power BI σε ένα κέντρο δεδομένων Azure, όχι στο δίκτυο της εταιρείας) από αυτόν που χρησιμοποιήθηκε αρχικά για τον έλεγχο ταυτότητας (δηλαδή, στον υπολογιστή του χρήστη που ρυθμίζει τις παραμέτρους των διαπιστευτηρίων προέλευσης δεδομένων στο δίκτυο της εταιρείας). Ο ενσωματωμένος Aad τύπος επιλύει αυτό το πρόβλημα χρησιμοποιώντας ένα διαφορετικό πρόγραμμα-πελάτη Microsoft Entra ID κατά τη ρύθμιση παραμέτρων διαπιστευτηρίων στην υπηρεσία Power BI. Αυτή η επιλογή δεν θα είναι διαθέσιμη σε συνδέσεις που χρησιμοποιούν το OAuth είδος ελέγχου ταυτότητας.
Οι περισσότερες συνδέσεις πρέπει να παρέχουν τιμές για τα AuthorizationUri πεδία και Resource . Και τα δύο πεδία μπορεί να είναι text τιμές ή μια συνάρτηση μεμονωμένου ορίσματος που επιστρέφει ένα 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)
Οι συνδέσεις που χρησιμοποιούν ένα αναγνωριστικό που βασίζεται σε Uri δεν χρειάζεται να παρέχουν Resource τιμή. Από προεπιλογή, η τιμή είναι ίση με τη διαδρομή ρίζας της παραμέτρου Uri της σύνδεσης.
Εάν ο πόρος Microsoft Entra ID της προέλευσης δεδομένων είναι διαφορετικός από την τιμή τομέα (για παράδειγμα, χρησιμοποιεί ένα GUID), τότε πρέπει να δοθεί μια Resource τιμή.
Δείγματα είδους ελέγχου ταυτότητας Aad
Στην παρακάτω περίπτωση, η προέλευση δεδομένων υποστηρίζει το καθολικό cloud Microsoft Entra ID χρησιμοποιώντας τον κοινό μισθωτή (δεν υπάρχει υποστήριξη Azure B2B). Η αίτηση για το εύρος .default επιστρέφει ένα διακριτικό με όλα τα προηγουμένως εξουσιοδοτημένα πεδία για το αναγνωριστικό εφαρμογής προγράμματος-πελάτη 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"
]
]
Στην παρακάτω περίπτωση, η προέλευση δεδομένων υποστηρίζει τον εντοπισμό μισθωτή με βάση το OpenID Connect (OIDC) ή παρόμοιο πρωτόκολλο. Αυτή η δυνατότητα επιτρέπει στη σύνδεση να προσδιορίσει το σωστό τελικό σημείο Microsoft Entra ID που θα χρησιμοποιηθεί με βάση μία ή περισσότερες παραμέτρους στη διαδρομή προέλευσης δεδομένων. Αυτή η προσέγγιση δυναμικής ανακάλυψης επιτρέπει στη σύνδεση να υποστηρίζει το 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"
]
]
Άλλοι τύποι ελέγχου ταυτότητας
Για πληροφορίες σχετικά με άλλους τύπους ελέγχου ταυτότητας που δεν καλύπτονται σε αυτό το άρθρο, όπως η καθολική σύνδεση που βασίζεται στο Kerberos, επισκεφτείτε το άρθρο για τις πρόσθετες λειτουργίες σύνδεσης για να μάθετε περισσότερα.