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.