SCIM App Wizard

Into

Er zijn op dit moment drie opties om gebruikers te synchroniseren tussen Okta en je eigen applicatie.

  1. OIN (OKTA Intergration Network) => zeer geschikt voor applicatie die beschikbaar zijn voor derden
  2. On Premises Provisioning => Een agent in je eigen netwerk, zorgt voor de verbinding tussen je eigen interne applicatie en Okta
  3. SCIM App Wizard => Als je "interne" applicatie beschikbaar is via internet, maar je wil niet dat deze toegevoegd wordt aan de OIN

Over deze 3de optie gaan we het nu hebben.

Demo

Library .NET Framework

OKTA voldoet aan de SCIM 2.0 specificaties en die zijn uitstekend beschreven in de RFC https://tools.ietf.org/html/rfc7644

Maar een library helpt en de volgende is geschreven voor .Net Framework en is incl. demo applicatie beschikbaar via https://github.com/FabianZoon/SCIM2/blob/master/README.md

Of als Nuget package voor Visual Studio via https://www.nuget.org/packages/Diligente_SCIM2/

End-Point

De hele afhandeling gebeurd via één end-point en in de demo maak ik hiervoor gebruik van een ashx-pagina.

// Authentication.HTTPHeader httpHeader = new Authentication.HTTPHeader() { Token="geheimtoken"};
Authentication.BasicAuth authentication = new Authentication.BasicAuth() { Username = "naam", Password = "geheim" };
SCIM2 scim2 = new SCIM2(context.Request, context.Response);
scim2.Authenticate(authentication);

Hiervoor kies je een Authentication methode, je creëerd een SCIM2 object en je doet de authenticatie-test.

Vervolgens maak je eigen functies aan die aangeroepen worden voor het aanmaken van een nieuwe gebruiker, het zoeken van een gebruiker of deze al bestaat en het weer verwijderen en bijwerken van het account.

scim2.NewUser += Scim2_NewUser;
    scim2.GetUser += Scim2_GetUser;
    scim2.GetUsers += Scim2_GetUsers;
    scim2.GetUserKey += Scim2_GetUserKey;
    scim2.DelUser += Scim2_DelUser;
    scim2.UpdateUser += Scim2_UpdateUser;

Tot slot roep je de scim2.Process(); aan.

IIS

De configuratie in IIS kan een beetje lastig zijn. SCIM gebruikt maakt van diverse "verbs". De GET en POST zijn algemeen bekend en ook actief. Maar bijvoorbeeld de PUT en DELETE acties zijn standaard niet toegestaan.

In de Web.Config (of in de IIS instellingen van de website), moeten deze geconfigureerd worden. Dit lost de 405 foutmelding op die terug kan komen.

<configuration>
  <system.webServer>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
    <handlers accessPolicy="Read, Write, Execute, Script">
      <remove name="StaticFile" />
      <remove name="SimpleHandlerFactory-ISAPI-2.0" />
      <remove name="WebDAV" />
      <remove name="SimpleHandlerFactory-Integrated-4.0" />
      <remove name="SimpleHandlerFactory-Integrated" />
      <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" requireAccess="Write" preCondition="integratedMode" />
      <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" requireAccess="Write" preCondition="integratedMode,runtimeVersionv4.0" />
      <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
      <add name="StaticFile" path="*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
    </handlers>
   <security>
      <authorization>
        <remove users="*" roles="" verbs="" />
        <add accessType="Allow" users="*" verbs="GET,HEAD,POST,PUT,DELETE,DEBUG" />
      </authorization>
    </security>

Daarnaast kan het noodzakelijk zijn om de authentication mode op Forms te zetten.

 <system.web>
(...)
    <authentication mode="Forms" />
  </system.web>

Het .NET Framework is niet echt geschikt voor deze interacties en .Net Core Web API is veel beter in staat voor de afhandeling.

Okta Configuratie

In Okta moet de SCIM App Wizard optie aangezet worden.

Dan wordt bij (elke) applicatie de Provisioning optie zichtbaar.

Deze kan vervolgens op SCIM gezet worden, wat resulteert in een extra Provisioning Tab


Bij de Provisioning kan vervolgens je end-point opgegeven worden, de zoeksleutel en de authantication mode.

Na een test die volgt is de applicatie ingesteld.

Vervolgens kan aangegeven worden welke acties berichten doorsturen.

Tevens kan de mapping aangepast worden. Je kan dus, heel specifiek aan aangeven welke profiel informatie doorgezet moet worden naar je applicatie.

Of van je applicatie, want je kunt deze koppeling ook gebruiken om periodiek gebruikers informatie te importeren.