Aracılığıyla paylaş


GitHub Bağlayıcı örneği

GitHub M uzantısı, OAuth 2.0 protokolü kimlik doğrulama akışı için nasıl destek ekleneceğini gösterir. GitHub'ın kimlik doğrulama akışının ayrıntıları hakkında daha fazla bilgiyi GitHub Docs sitesinde bulabilirsiniz.

M uzantısı oluşturmaya başlamadan önce GitHub'a yeni bir uygulama kaydetmeniz ve ve client_id dosyalarını uygulamanız için uygun değerlerle değiştirmeniz client_secret gerekir.

Visual Studio'daki uyumluluk sorunları hakkında not:Power Query SDK'sı, OAuth iletişim kutularını açmak için Internet Explorer tabanlı bir denetim kullanır. GitHub, bu denetim tarafından kullanılan IE sürümü desteğini kullanım dışı bırakmıştır. Bu, Visual Studio'nun içinden çalıştırılırsa uygulamanız için izin verme işlemini tamamlamanızı engeller. Alternatif olarak uzantıyı Power BI Desktop ile yükleyebilir ve ilk OAuth akışını orada tamamlayabilirsiniz. Uygulamanıza hesabınıza erişim verildikten sonra, sonraki oturum açma işlemleri Visual Studio'dan sorunsuz çalışır.

OAuth ve Power BI

OAuth bir yetkilendirme bilgisi devretme biçimidir. GitHub'da oturum açarak ve GitHub için oluşturduğunuz "uygulamayı" yetkileyerek, kullanıcı "uygulamanızın" Power BI'a veri almak için kendi adına oturum açmasına izin verir. "Uygulamaya" verileri alma (access_token alma) ve verileri bir zamanlamaya göre yenileme (refresh_token alma ve kullanma) hakları verilmelidir. Bu bağlamdaki "uygulamanız", Power BI içinde sorgu çalıştırmak için kullanılan Veri Bağlayıcınızdır. Power BI, access_token ve refresh_token sizin yerinize depolar ve yönetir.

Uyarı

Power BI'ın access_token almasına ve kullanmasına izin vermek için yeniden yönlendirme url'sini olarak https://oauth.powerbi.com/views/oauthredirect.htmlbelirtmeniz gerekir.

Bu URL'yi belirttiğinizde Ve GitHub başarıyla kimlik doğrulaması yapıp izinler verdiğinde, GitHub Power BI'ın access_token ve refresh_token alabilmesi için Power BI'ın oauthredirect uç noktasına yönlendirilir.

GitHub uygulamasını kaydetme

Power BI uzantınızın GitHub'da oturum açması gerekir. Bunu etkinleştirmek için https://github.com/settings/applications/new adresinde GitHub'a yeni bir OAuth uygulaması kaydedersiniz.

  1. Application name: M uzantınız için uygulamaya bir ad girin.
  2. Authorization callback URL: girin https://oauth.powerbi.com/views/oauthredirect.html.
  3. Scope: GitHub'da kapsamı user, repo olarak ayarlayın.

Uyarı

Kayıtlı bir OAuth uygulamasına benzersiz bir İstemci Kimliği ve İstemci Gizli Anahtarı atanır. İstemci sırrı paylaşılmamalıdır. GitHub uygulama sayfasından İstemci Kimliği ve İstemci Gizli Anahtarı'nı alırsınız. Veri Bağlayıcısı projenizdeki dosyaları İstemci Kimliği ( dosya) ve İstemci Gizli Anahtarı (client_idclient_secret dosyası) ile güncelleştirin.

GitHub OAuth'u uygulama

Örnek, size aşağıdaki adımlarda yol gösterir:

  1. OAuth'u desteklediğini bildiren bir Veri Kaynağı Türü tanımı oluşturun.
  2. M altyapısının OAuth akışını (StartLogin ) başlatabilmesi için ayrıntıları sağlayın.
  3. GitHub'dan alınan kodu bir access_token (FinishLogin ve TokenMethod) dönüştürün.
  4. GitHub API'sine (GithubSample.Contents ) erişen işlevleri tanımlayın.

1. Adım - Veri Kaynağı tanımı oluşturma

Veri Bağlayıcısı, uzantıyı tanımlayan ve benzersiz adı (bu, kaydın adıdır), desteklenen kimlik doğrulama türleri ve veri kaynağı için kullanıcı dostu bir görüntüleme adı (etiket) içeren bir kayıtla başlar. OAuth'u desteklerken tanım, OAuth sözleşmesini uygulayan işlevleri (bu örnekte StartLogin ve FinishLogin) içerir.

//
// Data Source definition
//
GithubSample = [
    Authentication = [
        OAuth = [
            StartLogin = StartLogin,
            FinishLogin = FinishLogin
        ]
    ],
    Label = Extension.LoadString("DataSourceLabel")
];

2. Adım - M altyapısının OAuth akışını başlatabilmesi için ayrıntıları sağlayın

GitHub OAuth akışı, kullanıcıları sayfaya https://github.com/login/oauth/authorize yönlendirdiğinizde başlar. Kullanıcının oturum açması için bir dizi sorgu parametresi belirtmeniz gerekir:

İsim Türü Description
client_id String Gerekli Kaydolduğunda GitHub'dan aldığınız istemci kimliği.
yönlendirme_uri String Uygulamanızda kullanıcıların yetkilendirmeden sonra gönderileceği URL. Yeniden yönlendirme URL'leri hakkında aşağıdaki ayrıntılara bakın. M uzantıları için redirect_uri "https://oauth.powerbi.com/views/oauthredirect.html"" olmalıdır.
kapsam String Virgülle ayrılmış kapsam listesi. Sağlanmadıysa, kapsam varsayılan olarak uygulama için geçerli bir belirteci olmayan kullanıcılar için boş bir kapsam listesidir. Uygulama için geçerli bir belirteci olan kullanıcılar için, kullanıcıya kapsam listesini içeren OAuth yetkilendirme sayfası gösterilmez. Bunun yerine, bu akış adımı, kullanıcının akışı en son tamamladığı zamandaki aynı kapsamlarla otomatik olarak tamamlanacaktır.
state String Belirsiz rastgele bir dize. Siteler arası istek sahteciliği saldırılarına karşı koruma sağlamak için kullanılır.

Aşağıdaki kod parçacığında, oturum açma akışını başlatmak için bir StartLogin işlevin nasıl uygulandığı açıklanmaktadır. İşlev StartLogin , resourceUrlstateve display değerini alır. Fonksiyonda, GitHub yetkilendirme URL'sini aşağıdaki parametrelerle birleştiren bir AuthorizeUrl oluşturun:

  • client_id: Uzantınızı GitHub'a kaydettikten sonra GitHub uygulama sayfasından istemci kimliğini alırsınız.
  • scope: Kapsamı "user, repo" olarak ayarlayın. Bu, kullanıcı için yetkilendirme kapsamını (yani uygulamanızın erişmek istediği öğeyi) ayarlar.
  • state: M motorunun aktardığı içsel bir değer.
  • redirect_uri: olarak https://oauth.powerbi.com/views/oauthredirect.htmlayarlayın.
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
            ];

Kullanıcı uygulamanızla ilk kez oturum açıyorsa (değeriyle client_id tanımlanır), uygulamanıza erişim izni vermesini isteyen bir sayfa görür. Sonraki oturum açma girişimleri kimlik bilgilerini ister.

3. Adım : GitHub'dan alınan kodu bir access_token dönüştürme

Kullanıcı kimlik doğrulama akışını tamamlarsa, GitHub code parametresinde geçici bir kod ve bir önceki adımda sağladığınız durumu içeren state parametresiyle Power BI yönlendirme URL'sine yeniden yönlendirir. İşleviniz FinishLogin parametresinden kodu ayıklar ve ardından TokenMethod işlevini kullanarak bir erişim belirteci ile değiştirir.

FinishLogin = (context, callbackUri, state) =>
    let
        Parts = Uri.Parts(callbackUri)[Query]
    in
        TokenMethod(Parts[code]);

GitHub erişim jetonu almak için GitHub Yetkilendirme Yanıtı'ndaki geçici kodunu kullanarak işlem yaparsınız. işlevinde TokenMethod GitHub'ın access_token uç noktasına (https://github.com/login/oauth/access_token) bir POST isteği formüle edersiniz. GitHub uç noktası için aşağıdaki parametreler gereklidir:

İsim Türü Description
client_id String Gerekli Kaydolduğunda GitHub'dan aldığınız istemci kimliği.
client_secret String Gerekli GitHub'dan kaydolduğunuzda aldığınız istemci sırrı.
kod String Gerekli FinishLogin içinde aldığınız kod.
yönlendirme_uri String Uygulamanızda kullanıcıların yetkilendirmeden sonra gönderileceği URL. Yeniden yönlendirme URL'leri hakkında aşağıdaki ayrıntılara bakın.

Web.Contents çağrısı için kullanılan parametrelerin ayrıntıları aşağıdadır.

Argument Description Değer
url Web sitesinin URL'si. https://github.com/login/oauth/access_token
options Bu işlevin davranışını denetlemek için bir kayıt. Bu durumda kullanılmaz
Query URL'ye program aracılığıyla sorgu parametreleri ekleyin. Content = Text.ToBinary(
Uri.BuildQueryString(
[
client_id = client_id,
client_secret = client_secret,
Kod = kod,
redirect_uri = redirect_uri
]
))

Nerede
  • client_id: GitHub uygulama sayfasından istemci kimliği.
  • client_secret: GitHub uygulama sayfasından istemci gizli anahtarı.
  • code: GitHub yetkilendirme yanıtında kod.
  • redirect_uri: Uygulamanızda kullanıcıların yetkilendirmeden sonra gönderileceği URL.
Headers HTTP isteği için ek üst bilgiler içeren bir kayıt. Headers= [
#“Content-type” = "application/x-www-form-urlencoded",
#"Accept" = "application/json"
]

Bu kod parçacığında, erişim belirteci için kimlik TokenMethod doğrulama kodu değişimine yönelik bir işlevin nasıl uygulandığı açıklanır.

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;

Hizmetten gelen JSON yanıtı bir access_token alanı içerir. yöntemi JSON.Document TokenMethod kullanarak JSON yanıtını bir M kaydına dönüştürür ve altyapıya döndürür.

Örnek yanıt:

{
    "access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a",
    "scope":"user,repo",
    "token_type":"bearer"
}

4. Adım - GitHub API'sine erişen işlevleri tanımlama

Aşağıdaki kod parçacığı, iki işlevi (GithubSample.Contents ve GithubSample.PagedTable) olarak sharedişaretleyerek dışarı aktarır ve bunları Veri Kaynağı Türü ile GithubSample ilişkilendirir.

[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);

İşlev GithubSample.Contents kullanıcı arabiriminde de yayımlanır ( Veri Al iletişim kutusunda görünmesine izin verir). Value.ReplaceType işlevi, işlev parametresini atfedilen türe ayarlamak için Url.Type kullanılır.

Bu işlevleri veri kaynağı türüyle GithubSample ilişkilendirerek kullanıcının sağladığı kimlik bilgilerini otomatik olarak kullanır. Genişletilebilirlik için etkinleştirilen tüm M kitaplığı işlevleri (Web.Contents gibi) bu kimlik bilgilerini de otomatik olarak devralır.

Kimlik bilgilerinin ve kimlik doğrulamasının nasıl çalıştığı hakkında daha fazla bilgi için bkz. Kimlik Doğrulamasını İşleme.

Örnek URL

Bu bağlayıcı, biçimlendirilmiş verileri GitHub v3 REST API uç noktalarının herhangi birinden alabilir. Örneğin, Veri Bağlayıcıları deposuna tüm işlemeleri çekme sorgusu şöyle görünür:

GithubSample.Contents("https://api.github.com/repos/microsoft/dataconnectors/commits")