Azure / Azure/static-web-apps-cli

Cannot lock down API when emulating auth locally - Blazor stack

Offen
#390 9 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

os: unix priority: low (P2) runtime: dotnet scope: auth scope: msha scope: rules engine status: investigating status: regression bug status: release-blocker type: bug
Vorherrschende Sprache
TypeScript
Sterne
668
Forks
155
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Are you accessing the CLI from the default port :4280 ?

  • No, I am using a different port number (--port) and accessing the CLI from that port
  • Yes, I am accessing the CLI from port :4280

Describe the bug

I cannot get API authentication working when running locally. It's possible I'm missing something in my setup, but I've read and searched documentation and haven't hit upon a solution. I'm running blazor wasm client side with a C# function api. Running the emulator and I can login and see the proper roles listed when I go to .auth/me. Client side authentication using Microsoft.Azure.Function.Authentication.WebAssembly package works fine. Pages properly authenticate using the Authorize attribute and views seem to properly respond to the authenticated state. The problem comes when trying to lock down the API.

My first attempt was to put the AllowedRoles in a route.

{
   "route": "/api/*",
   "methods": ["GET"],
   "allowedRoles": ["registereduser"]
},
{
   "route": "/api/*",
   "methods": ["PUT", "POST", "PATCH", "DELETE"],
   "allowedRoles": ["admin"]
}

This doesn't seem to do anything in the emulator. I can still see the calls being successfully made from the client side even when I'm not logged in.

I then moved on in my exploration and went to inspect what headers I'm getting in my api function. And I do not see any auth information. I made a test function to simply spit out all the headers and the x-ms-client-principal header is not present even when I make the call from an authenticated state.

Note that this all works perfectly fine when I'm actually running on Azure in a real static web app.

What am I missing? I really love the concept of being able to develop all of this locally, but trying to set this up has been kind of frustrating.

To Reproduce
Steps to reproduce the behavior:

  1. I created a blazor (.net 6) swa from the github template found at staticwebdev/blazor-starter
  2. I modified it for authentication as seen in this tutorial: https://docs.microsoft.com/en-us/shows/azure-tips-and-tricks-static-web-apps/how-to-secure-your-c-api-with-azure-static-web-apps-13-of-16--azure-tips-and-tricks-static-web-apps
  3. I run the swa cli using the following command:
    swa start http://localhost:5000 --run "dotnet run --project Client/Client.csproj" --api-location Api
  4. using a login button that simulates aad login, I can see the emulator's auth page and I enter a test username and the roles
  5. I can see those roles represented in the .auth/me page
  6. No auth information is attached when I call the api. The api is being called using the following syntax (Standard from the template):
    await Http.GetFromJsonAsync<WeatherForecast[]>("/api/WeatherForecast") ?? new WeatherForecast[]{};

Expected behavior
I would expect to be able to get/create the ClaimsPrincipal using the information found here: (https://docs.microsoft.com/en-us/azure/static-web-apps/user-information?tabs=csharp#api-functions)

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS] MacOS Monterey 12.2.1
  • Browser [e.g. chrome, safari]: Microsoft Edge
  • Version [e.g. 22]: Version 98.0.1108.56

Running SWA CLI version 0.8.2

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das Problem mit dem SWA CLI-Befehl aus dem Bericht, dem Blazor-Client und dem Api-Projekt und vergleiche anschließend lokale API-Anfragen mit dem dokumentierten Verhalten von .auth/me und der C#-API. Prüfe, ob authentifizierte Anfragen den erwarteten Principal enthalten und ob die konfigurierten allowedRoles-Regeln lokal durchgesetzt werden; abgeschlossen ist die Aufgabe, wenn die lokale API-Autorisierung dem dokumentierten Azure-Verhalten entspricht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
azure, cli, csharp
Bereich
api, authentication, cli
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.