Radius

Okta ondersteund een beperkte implementatie van Radius.

Hiervoor worden één (of meerdere) Radius Server Agent gebruikt die intern geïnstalleerd kan worden op het interne netwerk.

De Configuratie van deze Agents gebeurd via de RADIUS Application die door Okta wordt aangeboden.

Demo Setup

Voor deze demo setup gaan we gebruik maken een Radius Agent die geïnstalleerd is op een Windows 2019 server en een zelf gemaakte Client applicatie.

Okta Setup

Voeg de RADIUS Application toe aan Okta en loop de installatie wizzard door.

1 Settings

Hierbij is het van belang om de Secret Key goed te noteren. Deze is namelijk niet op te vragen, nadat deze is ingevuld. (wel te veranderen)

Ook de UDP-Port is hierbij van belang. Standaard is dit 1812.

2 Multi-factor

Standaard (2) staat multi-factor aan. Mocht voor demo doeleinde dit niet handig zijn, voeg dan een nieuwe Sign On Policy rule toe. Maar beter is het natuurlijk om je demo account te voorzien van Okta Verify Push.

Doe je dat, zorg dan bij (3) dat je deze automatisch ook aan zet. Het push bericht wordt dan automatisch op je telefoon weergegeven.

Dat laatste is vooral noodzakelijk, omdat er een time-out zit op de Radius Authenticatie. Het beste is als het login proces inclusief MFA, binnen de time-out afgehandeld wordt.


Okta Agent

De okta-agent is een recht, toe recht aan installatie. In de huidige versie wordt nog gevraagd om de sharedkey en de udp-port. Maar deze waardes worden niet gebruik en worden uit (bovenstaande) Okta Applicatie overgenomen.

Wel verstandig is het om een aparte (admin) service account aan te maken, waarmee de Okta Agent verbinding maakt. Er wordt namelijk een API-key aangemaakt, die gebruik maakt van dit account. Tevens is het handig in de logging om te zien wat de bron is van de log-regels.

Client

Als Client maken we gebruik van een C# programma, die gebruik maakt van de Radius-Net library https://github.com/frblondin/Radius-Net

Dit pakket is het handigste via NuGet toe te voegen aan je bron-code.

De demo code is als volgt:

protected void bLogin_Click(object sender, EventArgs e)
{
  lResult.Text = "";
  var rc = new RadiusClient(tbHostname.Text,1812,1813,tbSharedKey.Text);
  var authPacket = rc.Authenticate(tbUsername.Text, tbPassword.Text);
  try {
      var receivedPacket = rc.SendAndReceivePacket(authPacket);
      if (receivedPacket != null) {
          lResult.Text = string.Format("<strong>{0}</strong><br />", receivedPacket.Type);
          foreach (System.Net.Radius.RadiusAttribute attr in receivedPacket.Attributes) 
                lResult.Text += string.Format("<strong>{0}</strong> : {1}<br /> ", attr.Type, attr.Value);
      } else {
          lResult.Text = "Can't contact remote radius server !";
      }
  }
  catch (Exception ex) {
      lResult.Text += string.Format("Exception: {0}<br /> {1} ", ex.Message,ex.StackTrace);
  }
}

Als hostname wordt de server opgegeven, waar de Okta Radius Agent op geïnstalleerd is. En bij SharedKey wordt dezelfde waarde opgegeven, als die opgegeven in in de Okta-configuratie.

Resultaat

Het resultaat is onderstaand.