GitHub-liitinmalli
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 (
FinishLogin
jaTokenMethod
). - 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
-StartLogin
arvo.
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 shared
ja 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")