Uwierzytelnianie przy użyciu wielu loginów i haseł do jednego źródła danych

Zadanie z poprzedniego tygodnia wymagało jeszcze jednej rzeczy! Jak wspomniałem, klient pobierał dane z API. Dodatkowo klient chciał pobierać dane dla dwóch różnych podmiotów tj. musiał łączyć się z bazą za pomocą dwóch różnych zestawów haseł i loginów. Ponieważ wszystko miało być raportowane z Power BI, musiałem znaleźć rozwiązanie. Znów postanowiłem popisać w M!

Informacja: To rozwiązanie przechowuje hasło w tekscie w pliku .pbix. Jest to potencjalne ryzyko, ponieważ normalnie hasło nie jest zapisane w pliku pbix. Proszę korzystać z rozwagą. Jeśli znasz inne rozwiązanie, daj mi znać!

Podczas łączenia się ze źródłem danych, które wymaga uwierzytelnienia, Power BI pozwala na zapisanie hasła na później. Jest to bardzo wygodne i bezpieczne rozwiązanie w większości przypadków. Niestety, jest to duże ograniczenie kiedy chcemy łączyć się z tym samym źródłem dwoma hasłami. Edycja hasła odbywa się za pomocą „ustawień źródła danych”. Pozwala to zapisać jedno hasło na każde źródło:

Rozwiązanie problemu wymagało pracy z językiem M, który został wygenerowany przez Power BI po połączeniu się z API. Jak widać poniżej, Power BI używa funkcji Web.Contents do pobrania danych z URL:

 

 

Szybkie zerknięcie do dokumentacji pokazało, że M naturalnie pozwala na przekazanie nagłówków w funkcji Web.Contents. To świetnie! Ale jakie nagłówki przekazać? Login i hasło? Możliwe, ale to wymaga potwierdzenia. Przeczesywanie internetów poprowadziło do Wikipedii. Musiałem przekazać parametr „Authorization” w formie „Basic cośtam” . To oznacza, że trzeba zakodować mój login i hasło za pomocą Base64. Musiałbym wykorzystać do tego pewnie Pythona…. Ale poradziłem sobie i bez tego. Wszedłem na URL API poprzez przeglądarkę internetową z otwartym monitorem sieci (Ctrl + Shift + E w Firefox). Po zalogowaniu się do API mogłem podejrzeć nagłówek zapytania.

Po otrzymaniu danych, w monitorze sieci zobaczyłem to czego się spodziewałem, czyli jedno zapytanie typu GET:

Podwójne klikniecię pozwoliło na zobaczenie wszystkich nagłówków, pośród których był i nagłówek Authorization:

Skopiowałem zawartość i wkleiłem do Edytora:

 

 

To pozwoliło mi na połączenie się ze źródłem przy ustawieniach anonimowego logowania. Tym sposobem mogę łączyć się wykorzystując tyle loginów ile tylko chce. Mogę to robić w jednym zapytaniu lub we wielu. Mam nadzieje, że moje rozwiązanie pokazało, że technologia wykorzystywana pod maską w wielu narzędziach jest taka sama i dodatkowo dobrze udokumentowana.

Ponownie ważna informacja: To rozwiązanie daje każdemu, kto ma dostęp do pliku, możliwość uwierzytelnienia się z API. Do ostrożnego użytku. Jeśli znasz inne rozwiązanie, daj mi znać!

Dzięki

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *