Azure Functions - autoryzacja za pomocą kluczy
W tym tygodniu musiałem udostępnić użytkownikowi pewne dane z Azure, które ów użytkownik zamierzał konsumować przy wykorzystaniu PowerQuery w Excelu. Niestety jak się okazało PowerQuery wymaga zbyt dużych uprawnień do zasobów źródłowych, a dodatkowo nie mogłem użyć Azure AD jako źródła tożsamości. Po przeanalizowaniu wymagań i ograniczeń, postanowiłem wykorzystać usługę Azure Functions. Jest to jedna z moich ulubionych usług w Microsoft Azure z którymi przyszło mi ostatnio pracować.
Ze względu na niskie koszty oraz elastyczność działania Functions pretendują one do miana “chmurowego szwajcarskiego scyzoryka”. Wracając do spraw technicznych, funkcja ma działać jako proxy do zwracania danych. Uruchamiana przez PowerQuery jest za pomocą http GET i zwracająca dane w JSON. Sama funkcja to kilka linijek PowerShell. O samym kodzie napiszę w późniejszym terminie.
Co do uwierzytelniania użytkowników, to na szczęście Functions udostępniają również autoryzację na poziomie całej aplikacji lub pojedynczej funkcji za pomocą kluczy. Nazywa się to Function Keys. Opis wykorzystania znaleźć można w dokumentacji pod adresem: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook#working-with-keys.
Klucze rozdzielamy na dedykowane dla funkcji (Functions Key) oraz dla całej Function App (Host Keys). Zarządzanie kluczami dostępne jest w zakładce Manage z poziomu widoku funkcji. Klucze możemy dowolnie dodawać, odświeżać czy usuwać.
Samo włączenie autoryzacji dokonujemy w zakładce Integrate. Dostępne są trzy opcje:
- anonymous - bez klucza,
- function - dla konkretnej funkcji,
- admin - klucz administracyjny.
Sam klucz używamy w dwojaki sposób.
Pierwszy to dodajemy go jako parametr do URL. URL wygląda wtedy tak:
https://<yourapp>.azurewebsites.net/api/<function>?code=<ApiKey>
Drugi sposób to dodanie go do nagłówka o nazwie x-functions-key do requestu http.