Muistiinpano
Tälle sivulle pääsy edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoja.
Tälle sivulle pääsy edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoja.
GitHub M -laajennus näyttää, miten voit lisätä tuen OAuth 2.0 -protokollatodentamisen työnkululle. Saat lisätietoja GitHubin todennustyönkulun ominaisuuksista GitHub-kehittäjäsivustosta.
Ennen kuin aloitat M-laajennuksen luomisen, sinun on rekisteröitävä uusi sovellus GitHubissa ja korvattava client_id client_secret -tiedostot sovellukseen sopivilla arvoilla.
Huomautus Visual Studion yhteensopivuusongelmista: Power Query SDK käyttää Internet Exploreriin perustuvaa ohjausobjektia OAuth-valintaikkunoiden ponnahdusikkunassa. GitHub on poistanut käytöstä tämän ohjausobjektin käyttämän IE-version tuen, mikä estää sinua suorittamasta sovelluksesi käyttöoikeuden myöntämistä, jos sitä käytetään Visual Studiossa. Vaihtoehtoisesti voit ladata laajennuksen Power BI Desktopilla ja suorittaa siellä ensimmäisen OAuth-työnkulun. Kun sovelluksesi on myöntänyt tilillesi käyttöoikeuden, myöhemmät kirjautumiset toimivat hyvin Visual Studiosta.
OAuth ja Power BI
OAuth on tunnistetietojen delegoinnin muoto. Kirjautumalla sisään GitHubiin ja valtuuttamalla GitHubille luomasi "sovelluksen" käyttäjä antaa "sovelluksesi" kirjautua sisään puolestaan tietojen noutamiseksi Power BI:hin. Sovellukselle on myönnettävä oikeudet tietojen noutamiseen (access_token) ja tietojen päivittämiseen aikataulun mukaisesti (refresh_token noutaminen ja käyttäminen). Tässä kontekstissa sovelluksesi on tietoyhdistin, jota käytetään kyselyiden suorittamiseen Power BI:ssä. Power BI tallentaa ja hallitsee access_token ja refresh_token puolestasi.
Muistiinpano
Jotta Power BI voi hankkia access_token ja käyttää sitä, sinun on määritettävä uudelleenohjauksen URL-osoite muodossa https://oauth.powerbi.com/views/oauthredirect.html.
Kun määrität tämän URL-osoitteen ja GitHub todentaa ja myöntää käyttöoikeudet, GitHub ohjaa uudelleen PowerBI:n oauthredirect-päätepisteeseen, jotta Power BI voi noutaa access_token ja refresh_token.
GitHub-sovelluksen rekisteröiminen
Power BI -laajennuksen on kirjauduttava GitHubiin. Jos haluat ottaa tämän käyttöön, rekisteröi uusi OAuth-sovellus GitHubissa osoitteessa https://github.com/settings/applications/new.
Application name: Anna sovellukselle nimi M-laajennukselle.Authorization callback URL: Kirjoita https://oauth.powerbi.com/views/oauthredirect.html.Scope: Määritä GitHubissa vaikutusalueen arvoksiuser, repo.
Muistiinpano
Rekisteröidylle OAuth-sovellukselle määritetään yksilöivä asiakastunnus ja asiakkaan salasana. Asiakkaan salaista koodia ei pidä jakaa. Saat Asiakastunnuksen ja asiakkaan salasanan GitHub-sovellussivulta. Päivitä Data Connector -projektisi tiedostoilla Client ID (client_id tiedosto) ja Client Secret (client_secret tiedosto).
GitHub OAuthin käyttöönotto
Tässä mallissa käydään läpi seuraavat vaiheet:
- Luo tietolähteen lajimääritelmä, joka ilmoittaa tukevansa OAuth-todennusta.
- Anna tiedot, jotta M-moduuli voi käynnistää OAuth-työnkulun (
StartLogin). - Muunna GitHubista saatu koodi access_token (
FinishLoginjaTokenMethod). - Määritä funktiot, jotka käyttävät GitHub-ohjelmointirajapintaa (
GithubSample.Contents).
Vaihe 1 – Luo tietolähteen määritys
Tietoyhdistin alkaa tietueella, joka kuvaa laajennusta, mukaan lukien sen yksilöivä nimi (joka on tietueen nimi), tuetut todennustyypit) ja kutsumanimi (selite) tietolähteelle.
Kun tuet OAuth-todennusta, määritelmä sisältää funktiot, jotka toteuttavat OAuth-sopimuksen – tässä tapauksessa StartLogin ja FinishLogin.
//
// Data Source definition
//
GithubSample = [
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin
]
],
Label = Extension.LoadString("DataSourceLabel")
];
Vaihe 2 – Anna tiedot, jotta M-moduuli voi käynnistää OAuth-työnkulun
GitHub OAuth -työnkulku käynnistyy, kun ohjaat käyttäjiä https://github.com/login/oauth/authorize sivulle.
Jotta käyttäjä kirjautuu sisään, sinun on määritettävä joukko kyselyparametreja:
| Nimi | Laji | Kuvaus |
|---|---|---|
| client_id | merkkijono | Pakollinen. Asiakastunnus, jonka sait GitHubista rekisteröityessäsi. |
| redirect_uri | merkkijono | Sovelluksessasi oleva URL-osoite, johon käyttäjät lähetetään valtuutuksen jälkeen. Lisätietoja uudelleenohjauksen URL-osoitteista on alla. M-laajennuksia redirect_uri varten on oltava "https://oauth.powerbi.com/views/oauthredirect.html". |
| laajuus | merkkijono | Pilkuin eroteltu luettelo vaikutusalueista. Jos vaikutusaluetta ei anneta, vaikutusalueena on tyhjä luettelo niiden käyttäjien vaikutusalueista, joilla ei ole kelvollista tunnusta sovellukselle. Käyttäjille, joilla on jo sovelluksen kelvollinen tunnus, käyttäjälle ei näytetä OAuth-valtuutussivua, jolla on luettelo vaikutusalueista. Sen sijaan työnkulun tämä vaihe täydentyy automaattisesti samoilla vaikutusalueilla, joita käytettiin, kun käyttäjä viimeksi suoritti työnkulun. |
| state | merkkijono | Arvailematon satunnaismerkkijono. Sitä käytetään suojautumiseen väärennöshyökkäyksiltä sivustojen välisiltä pyynnöiltä. |
Seuraavassa koodikatkelmassa kuvataan, miten voit käynnistää kirjautumisen funktion StartLogin avulla.
Funktiolla on -resourceUrl, state- ja display -StartLoginarvo.
Luo -funktiossa - AuthorizeUrl toiminto, joka liittää GitHub-valtuutus-URL-osoitteen seuraavilla parametreilla:
client_id: Saat asiakastunnuksen, kun olet rekisteröinyt laajennuksen GitHubiin GitHub-sovellussivulta.scope: Määritä vaikutusalueeksi "user, repo". Tämä määrittää valtuutuksen laajuuden (eli sen, mitä sovelluksesi haluaa käyttää) käyttäjälle.state: Sisäinen arvo, jonka M-moduuli välittää.redirect_uri: Määritä arvoksi 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
];
Jos käyttäjä kirjautua sisään sovellukseen ensimmäistä kertaa (sen client_id arvon mukaan tunnistettuna), hän näkee sivun, jossa häntä pyydetään myöntämään käyttöoikeus sovellukseen. Myöhemmissä kirjautumisyrityksissä pyydetään vain heidän tunnistetietojaan.
Vaihe 3 – Muunna GitHubista saatu koodi access_token
Jos käyttäjä suorittaa todennustyönkulun, GitHub uudelleenohjaa takaisin Power BI -uudelleenohjauksen URL-osoitteeseen parametrin tilapäisellä koodilla code sekä parametrin edellisessä vaiheessa state antamaasi tilaan. Funktio FinishLogin poimii koodin parametrista callbackUri ja vaihtaa sen käyttöoikeustietueeksi (funktion TokenMethod avulla).
FinishLogin = (context, callbackUri, state) =>
let
Parts = Uri.Parts(callbackUri)[Query]
in
TokenMethod(Parts[code]);
Saat GitHub-käyttöoikeustietueen välittämällä tilapäisen koodin GitHub Authorize Response -kohteesta. Funktiossa TokenMethod muotoilet POST-pyynnön GitHubin access_token päätepisteeseen (https://github.com/login/oauth/access_token).
GitHub-päätepisteeseen vaaditaan seuraavat parametrit:
| Nimi | Laji | Kuvaus |
|---|---|---|
| client_id | merkkijono | Pakollinen. Asiakastunnus, jonka sait GitHubista rekisteröityessäsi. |
| client_secret | merkkijono | Pakollinen. Asiakassalaisuus, jonka sait GitHubista rekisteröityessäsi. |
| koodi | merkkijono | Pakollinen. Koodi, jonka sait kohteessa FinishLogin. |
| redirect_uri | merkkijono | Sovelluksessasi oleva URL-osoite, johon käyttäjät lähetetään valtuutuksen jälkeen. Lisätietoja uudelleenohjauksen URL-osoitteista on alla. |
Tässä ovat Web.Contents-kutsun käytetyt parametrit.
| Argumentti | Kuvaus | Arvo |
|---|---|---|
| URL-osoite | Verkkosivuston URL-osoite. | https://github.com/login/oauth/access_token |
| options | Tietue, jolla ohjataan tämän funktion toimintaa. | Ei käytetä tässä tapauksessa |
| Kysely | Lisää kyselyparametrit ohjelmallisesti URL-osoitteeseen. | Sisältö = Text.ToBinary(Missä
|
| Otsikot | Tietue, jolla on lisäotsikot HTTP-pyynnölle. | Headers= [ |
Tässä koodikatkelmassa kuvataan, miten voit toteuttaa funktion TokenMethod todennuskoodin vaihtamiseksi käyttöoikeustietueeksi.
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;
Palvelun JSON-vastaus sisältää access_token kentän. Menetelmä TokenMethod muuntaa JSON-vastauksen M-tietueeksi Json.Documentin avulla ja palauttaa sen moduuliin.
Mallivastaus:
{
"access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a",
"scope":"user,repo",
"token_type":"bearer"
}
Vaihe 4 – Määritä funktiot, jotka käyttävät GitHub-ohjelmointirajapintaa
Seuraava koodikatkelma vie kaksi funktiota (GithubSample.Contents ja GithubSample.PagedTable) merkitsemällä ne arvoiksi sharedja liittämällä ne tietolähteen GithubSample lajiin.
[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);
Funktio GithubSample.Contents julkaistaan myös käyttöliittymään (jolloin se näkyy Nouda tiedot -valintaikkunassa). Value.ReplaceType-funktion avulla funktion parametri määritetään määritetylle Url.Type tyypille.
Liittämällä nämä funktiot GithubSample tietolähdelajiin ne käyttävät automaattisesti käyttäjän antamia tunnistetietoja. Kaikki M-kirjastofunktiot, jotka on otettu käyttöön laajennettaviksi (kuten Web.Contents), perivät myös nämä tunnistetiedot automaattisesti.
Lisätietoja tunnistetietojen ja todentamisen toiminnasta on artikkelissa Todentamisen käsittely.
URL-malliosoite
Tämä liitin voi noutaa muotoiltuja tietoja mistä tahansa GitHub v3 REST -ohjelmointirajapinnan päätepisteestä. Esimerkiksi kysely, joka hakee kaikki vahvistukset tietoyhdistimien säilöön, näyttäisi seuraavalta:
GithubSample.Contents("https://api.github.com/repos/microsoft/dataconnectors/commits")