Dziś zamierzam napisać jak korzystać z App permission w SharePoint online. Temat ciekawy i bardzo użyteczny, a traktowany trochę po macoszemu. Tym tematem powoli wracam do pisania, a trochę czasu, delikatnie mówiąc, minęło od mojego ostatniego wpisu. Wydaje się jednak, że pora wrócić do życia. Zaczynajmy więc 🙂 .Pamiętacie mój wpis o korzystaniu z współrzędnych geograficznych w SharePoint? Jak można tam zobaczyć kod z którego korzystam zawiera nazwę użytkownika i hasło przechowywane jako czysty tekst. O ile takie rozwiązanie może być w ostateczności używane w przypadku ręcznego uruchamiania aplikacji, to w przypadku automatycznego procesu jest to delikatnie mówiąc niewskazane. Pojawia się zatem pytanie co można z tym zrobić? Jak zaimplementować uwierzytelnianie aby pozbyć się nazwy użytkownika i hasła?
Najlepszym rozwiązaniem tego problemu jest skorzystanie z App permission. Dzięki temu nasza aplikacja będzie korzystała z tokenów, które zapewnią nam znacznie wyższy poziom bezpieczeństwa. Pierwszym krokiem powinno być wygenerowania Client Id oraz Client Secret korzystając z adresu URL, który ma następującą strukturę:
URL: https://[tenant].sharepoint.com/_layouts/15/appregnew.aspx
A następnie naciskamy przycisk Generate. Otrzymamy dwa ciągi znaków, która posłużą naszej aplikacji do generowania tokenów. W polu Title podajemy nazwę naszej aplikacji. Warto tu użyć czegoś, co będzie czymś więcej niż „moja aplikacja”, bo za kilka miesięcy możemy mieć problem z przypomnieniem sobie, do czego generowaliśmy to uwierzytelnienie. Jako app domain podajemy localhost, a Redirect URI podajemy nasz URL naszego tenanta. To był pierwszy krok. Po wygenerowaniu tokenów musimy jeszcze nadać pozwolenia dla naszej aplikacji. Robimy to pod tym adresem: /layouts/15/appinv.aspx. Po wprowadzeniu pliku XML
A sama struktura wpisu XML jest następująca
[code lang="XML"] <AppPermissionRequests AllowAppOnlyPolicy="true"> <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" /> </AppPermissionRequests> [/code]
Jak wykorzystać App permission w SharePoint online
No dobrze to pora wykorzystać teraz naszą wiedzę w praktyce. Stwórzmy sobie zwykłą aplikację konsolową. Następnie w NuGet Package Manager szukamy czegoś co się nazywa AppForSharePointWebToolkit. Instalujmy.
Po zainstalowaniu paczki w referencjach pojawi się wiele odwołań do Microsoft.SharePoint.Client.* oraz plik App.config, który jest naszym kolejnym celem. Otwórzmy go i dodajmy nową sekcję appSettings z nasyzmi kluczami ClientId oraz ClientSecret. Podajemy klucze, które wcześniej sobie wygenerowaliśmy. U mnie to wygląda w ten sposób
[code lang="XML"] <appSettings> <add key="ClientId" value="28921286-09f2-4bce-819a-4e53a12dabb6"/> <add key="ClientSecret" value="HOaS6LQbBi8QYU/1x67Bdae38qJh79qt+LY4IoLcQHM="/> <add key="ClientSettingsProvider.ServiceUri" value="" /> </appSettings> [/code]
Ostatnim elementem, który będzie nam potrzebny to dodanie w program.cs wpisu using Microsoft.SharePoint.Client; . I to wszystko. Ja mam zwyczaju korzystać z dodatkowej klasy, której jedynym celem jest zwracanie clientContext dla danego adresu URL
[code lang="csharp"] public static ClientContext GetClientContext(string siteUrl) { Uri siteUri = new Uri(siteUrl); string realm = TokenHelper.GetRealmFromTargetUrl(siteUri); string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken; var clientContext = TokenHelper.GetClientContextWithAccessToken(siteUri.ToString(), accessToken); return clientContext; } [/code]
Mając clientContext możemy robić w naszym tenancie co tylko chcemy.