ASP.NET core Web Api Key Authentication

Nachdem ich mich im dem letzten Beitrag mit dem klassischen .NET Framework ASP.NET MVC als Beispiel beschäftigt habe, soll auch die moderne Variante nicht fehlen. Aktuell hat Visual Studio kein VB.NET ASP.NET Core Templates, so das als Sprache für den wenigen Code C# zum Einsatz kommt.

 

Es wird eine Filter Klasse benötigt, die als Attribut (AuthorizationKeyFilter) der Web Api Methode vorangestellt wird. Das ist optisch einfach schöner Code.

   1:  [HttpGet]
   2:  [AuthorizationKeyFilter]
   3:  public IEnumerable<string> Get()
   4:   {
   5:     return new string[] { "value1", "value2" };
   6:   }

Den Namenskonventionen folgend wird die neue C# Klasse AuthorizationKeyFilterAttribut genannt und implementiert Interfaces für Attribute und Authorization um an der richtigen Stelle der Pipeline zu landen. Im HTTP Header des API Requests wird ein Authorization Feld erwartet, gefolgt von ApiKey und einem Wert. Der Ansatz ist der RFZ 6750 entliehen in der per Bearer Token Authentifiziert wird in der Form: Authorization Bearer MyToken

Der Header wird in der OnAuthorization Methode aus dem HttpContext extrahiert und auf gültige Zusammensetzung validiert. In jedem anderen Fall der Fehlercode 401 (not authorized) als Response geliefert.

   1:   public class AuthorizationKeyFilterAttribute : Attribute, IAuthorizationFilter
   2:      {
   3:          public void OnAuthorization(AuthorizationFilterContext context)
   4:          {
   5:              var apiKey = context.HttpContext.Request.Headers["Authorization"];
   6:              if (apiKey.Any())
   7:              {
   8:                  var subStrings = apiKey.ToString().Split(" ");
   9:                  if (!(subStrings.Length >= 2 && subStrings[0] == "ApiKey" && subStrings[1]=="1234"))
  10:                  {
  11:                      context.Result = new UnauthorizedResult();
  12:                  }
  13:              }
  14:              else
  15:              {
  16:                  context.Result = new UnauthorizedResult();
  17:              }
  18:          }
  19:      }
  20:  }

Für den Test der Api empfiehlt sich Fiddler und der darin enthaltene Request Composer. Zuerst wird ein Request aus dem Browser (api/controller) mitgeschnitten.

image

Logischerweise kommt hier die Fehlermeldung. Als nächstes wird per Drag und Drop dieser Listeneintrag auf den Reiter Composer gezogen und der Header um den Api Key Eintrag ergänzt und er Request per Execute ausgeführt

image

Nun muss der Response den HTTP Code 200 enthalten und natürlich die Json Daten.

image

Kommentare sind geschlossen