Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
GitHub M-utvidelsen viser hvordan man kan legge til støtte for en OAuth 2.0-protokollautentiseringsflyt. Du kan lære mer om detaljene rundt GitHubs autentiseringsflyt på GitHub Docs-nettsiden.
Før du begynner å lage en M-utvidelse, må du registrere en ny app på GitHub og erstatte og-filene client_idclient_secret med riktige verdier for appen din.
Merknad om kompatibilitetsproblemer i Visual Studio:Power Query SDK bruker en kontroll basert på Internet Explorer for å åpne OAuth-dialoger. GitHub har avviklet sin støtte for den versjonen av IE som brukes av denne kontrollen, noe som vil hindre deg i å fullføre tillatelsen for appen din hvis den kjøres fra Visual Studio. Et alternativ er å laste utvidelsen med Power BI Desktop og fullføre den første OAuth-flyten der. Etter at applikasjonen din har fått tilgang til kontoen din, vil påfølgende pålogginger fungere fint fra Visual Studio.
OAuth og Power BI
OAuth er en form for delegering av legitimasjoner. Ved å logge inn på GitHub og autorisere "applikasjonen" du oppretter for GitHub, lar brukeren din "applikasjon" logge inn på deres vegne for å hente data til Power BI. «Applikasjonen» må få rettigheter til å hente data (hente en access_token) og oppdatere dataene på en tidsplan (hente og bruke en refresh_token). Din "applikasjon" i denne sammenhengen er Data Connector som brukes til å kjøre spørringer i Power BI. Power BI lagrer og administrerer access_token og refresh_token på dine vegne.
Note
For at Power BI skal kunne hente og bruke access_token, må du spesifisere omdirigeringsurl-en som https://oauth.powerbi.com/views/oauthredirect.html.
Når du spesifiserer denne URL-en og GitHub godkjenner og gir tillatelser, vil GitHub omdirigere til Power BIs oauthredirect-endepunkt slik at Power BI kan hente access_token og refresh_token.
Hvordan registrere en GitHub-app
Power BI-utvidelsen din må logge inn på GitHub. For å aktivere dette registrerer du en ny OAuth-applikasjon hos GitHub på https://github.com/settings/applications/new.
-
Application name: Skriv inn et navn på søknaden for din M-utvidelse. -
Authorization callback URL: Kom inn https://oauth.powerbi.com/views/oauthredirect.html. -
Scope: I GitHub, sett scope til .user, repo
Note
En registrert OAuth-applikasjon får tildelt en unik klient-ID og klienthemmelighet. Klienthemmeligheten bør ikke deles. Du får klient-ID og Client Secret fra GitHub-applikasjonssiden. Oppdater filene i Data Connector-prosjektet ditt med Client ID (client_id fil) og Client Secret (client_secret fil).
Hvordan implementere GitHub OAuth
Dette eksempelet tar deg gjennom følgende steg:
- Lag en Data Source Kind-definisjon som erklærer at den støtter OAuth.
- Gi detaljer slik at M-motoren kan starte OAuth-flyten (
StartLogin). - Konverter koden mottatt fra GitHub til en access_token (
FinishLoginogTokenMethod). - Definer funksjoner som får tilgang til GitHub-API-et (
GithubSample.Contents).
Trinn 1 – Lag en datakildedefinisjon
En Data Connector starter med en post som beskriver utvidelsen, inkludert dens unike navn (som er navnet på posten), støttede autentiseringstyper, og et vennlig visningsnavn (etikett) for datakilden.
Når man støtter OAuth, inneholder definisjonen funksjonene som implementerer OAuth-kontrakten—i dette tilfellet, StartLogin og FinishLogin.
//
// Data Source definition
//
GithubSample = [
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin
]
],
Label = Extension.LoadString("DataSourceLabel")
];
Trinn 2 – Gi detaljer slik at M-motoren kan starte OAuth-flyten
GitHub OAuth-flyten starter når du dirigerer brukere til https://github.com/login/oauth/authorize siden.
For at brukeren skal logge inn, må du spesifisere et antall spørringsparametere:
| Navn | Type: | Beskrivelse |
|---|---|---|
| client_id | streng | Obligatorisk. Klient-ID-en du mottok fra GitHub da du registrerte deg. |
| redirect_uri | streng | URL-en i appen din hvor brukerne vil bli sendt etter autorisasjon. Se detaljer nedenfor om omdirigerings-URL-er. For M-utvidelser må de redirect_uri være "https://oauth.powerbi.com/views/oauthredirect.html". |
| område | streng | En komma-separert liste over scopes. Hvis det ikke oppgis, går omfanget som standard til en tom liste over omfang for brukere som ikke har en gyldig token for appen. For brukere som allerede har en gyldig token for appen, vil ikke brukeren få se OAuth-autorisasjonssiden med listen over scopes. I stedet vil dette steget i flyten automatisk fullføres med de samme scopene som ble brukt sist gang brukeren fullførte flyten. |
| tilstand | streng | En uforutsigbar tilfeldig streng. Det brukes for å beskytte mot angrep på forfalskninger på tvers av nettsteder. |
Følgende kodeutdrag beskriver hvordan man implementerer en StartLogin funksjon for å starte innloggingsflyten.
En StartLogin funksjon har en resourceUrl, state, og display verdi.
I funksjonen opprettes en AuthorizeUrl som sammenkobler GitHub-autorisasjons-URL-en med følgende parametere:
-
client_id: Du får klient-ID-en etter at du har registrert utvidelsen din hos GitHub fra GitHubs applikasjonsside. -
scope: Sett scope til "user, repo". Dette setter autorisasjonsomfanget (det vil si hva appen din ønsker å få tilgang til) for brukeren. -
state: En intern verdi som M-motoren passerer inn. -
redirect_uri: Sett til https://oauth.powerbi.com/views/oauthredirect.html.
StartLogin = (resourceUrl, state, display) =>
let
AuthorizeUrl = "https://github.com/login/oauth/authorize?" & Uri.BuildQueryString([
client_id = client_id,
scope = "user, repo",
state = state,
redirect_uri = redirect_uri])
in
[
LoginUri = AuthorizeUrl,
CallbackUri = redirect_uri,
WindowHeight = windowHeight,
WindowWidth = windowWidth,
Context = null
];
Hvis dette er første gang brukeren logger inn med appen din (identifisert ved verdi client_id ), vil de se en side som ber dem gi tilgang til appen din. Påfølgende innloggingsforsøk vil be om deres legitimasjon.
Trinn 3 – Konverter koden mottatt fra GitHub til en access_token
Hvis brukeren fullfører autentiseringsprosessen, omdirigerer GitHub tilbake til Power BI-omdirigerings-URL-en med en midlertidig kode i en code parameter, samt tilstanden du oppga i forrige steg i en state parameter. Funksjonen din FinishLogin vil hente ut koden fra parameteren callbackUri , og deretter bytte den mot en tilgangstoken (ved å bruke funksjonen TokenMethod ).
FinishLogin = (context, callbackUri, state) =>
let
Parts = Uri.Parts(callbackUri)[Query]
in
TokenMethod(Parts[code]);
For å få en GitHub-tilgangstoken, sender du den midlertidige koden fra GitHub Authorize Response. I funksjonen TokenMethod formulerer du en POST-forespørsel til GitHubs access_token endepunkt (https://github.com/login/oauth/access_token).
Følgende parametere kreves for GitHub-endepunktet:
| Navn | Type: | Beskrivelse |
|---|---|---|
| client_id | streng | Obligatorisk. Klient-ID-en du mottok fra GitHub da du registrerte deg. |
| client_secret | streng | Obligatorisk. Klienthemmeligheten du mottok fra GitHub da du registrerte deg. |
| kode | streng |
Obligatorisk. Koden du mottok i FinishLogin. |
| redirect_uri | streng | URL-en i appen din hvor brukerne vil bli sendt etter autorisasjon. Se detaljer nedenfor om omdirigerings-URL-er. |
Her er detaljene som ble brukt for Web.Contents-kallet .
| Diskusjon | Beskrivelse | Verdi |
|---|---|---|
| url | URL-en til nettsiden. | https://github.com/login/oauth/access_token |
| Alternativer | En post for å kontrollere oppførselen til denne funksjonen. | Ikke brukt i dette tilfellet |
| Spørsmål | Legg programmatisk til spørringsparametere i URL-en. |
Innhold = Tekst.TilBinær(Where
|
| Overskrifter | En post med ekstra headere for HTTP-forespørselen. |
Headers= [ |
Denne kodesnippeten beskriver hvordan man implementerer en TokenMethod funksjon for å bytte en autentiseringskode mot en tilgangstoken.
TokenMethod = (code) =>
let
Response = Web.Contents("https://Github.com/login/oauth/access_token", [
Content = Text.ToBinary(Uri.BuildQueryString([
client_id = client_id,
client_secret = client_secret,
code = code,
redirect_uri = redirect_uri])),
Headers=[#"Content-type" = "application/x-www-form-urlencoded",#"Accept" = "application/json"]]),
Parts = Json.Document(Response)
in
Parts;
JSON-svaret fra tjenesten vil inneholde et access_token felt. Metoden TokenMethod konverterer JSON-responsen til en M-post ved hjelp av Json.Document, og returnerer den til motoren.
Eksempel på svar:
{
"access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a",
"scope":"user,repo",
"token_type":"bearer"
}
Steg 4 - Definer funksjoner som får tilgang til GitHub API-et
Følgende kodesnippet eksporterer to funksjoner (GithubSample.Contents og GithubSample.PagedTable) ved å markere dem som shared, og knytter dem til GithubSample Data Source Type.
[DataSource.Kind="GithubSample", Publish="GithubSample.UI"]
shared GithubSample.Contents = Value.ReplaceType(Github.Contents, type function (url as Uri.Type) as any);
[DataSource.Kind="GithubSample"]
shared GithubSample.PagedTable = Value.ReplaceType(Github.PagedTable, type function (url as Uri.Type) as nullable table);
Funksjonen GithubSample.Contents publiseres også i brukergrensesnittet (slik at den vises i hent data-dialogen ).
Value.ReplaceType-funksjonen brukes til å sette funksjonsparameteren til den Url.Type tilskrevne typen.
Ved å knytte disse funksjonene til GithubSample datakildetypen, vil de automatisk bruke legitimasjonen brukeren har oppgitt. Alle M-bibliotekfunksjoner som er aktivert for utvidelse (som Web.Contents) vil automatisk arve disse legitimasjonene også.
For mer informasjon om hvordan legitimasjon og autentisering fungerer, se Håndtering av autentisering.
Eksempel-URL
Denne koblingen kan hente formaterte data fra alle GitHub v3 REST API-endepunktene. For eksempel vil spørringen for å hente alle commits til Data Connectors-repoet se slik ut:
GithubSample.Contents("https://api.github.com/repos/microsoft/dataconnectors/commits")