Einfaches ASP.NET -Autorisierungs -Boilerplate -Projekt. Kein EF, keine Datenbank, kein Identitätserver4, kein Sitzungsspeicher, nur eine grundlegende Protokollierung im System für Cookies und JWT mit einigen Autorisierungsrichtlinien und einem Controller mit einer Reihe von Beispielen. Kürzlich auf .net 8 aktualisiert.
Um cd auf das Root zu rennen, in dem sich die .csproj -Datei befindet, und die folgenden Befehle ausführen.
cd examples/cookies+api
dotnet run
Die App simuliert ein grundlegendes gruppenbasiertes Administratorsystem. Es gibt drei Gruppen, die Benutzer sein können: users , superusers und admins . Alle Benutzer sind Mitglieder der users , aber nicht alle sind Mitglieder von superusers und oder admins und es gibt Teile der App, die das Authorize Attribut mit dem Richtlinienzugriff auf Filterzugriff verwenden.
Es gibt eine Reihe von Anmeldungen zum Testen. Die Startseite verfügt über eine Tabelle der verfügbaren Benutzer und Passwörter und zeigt an, ob ein Benutzer Mitglied von superusers und / oder admins ist.

Anschließend können Sie die folgenden Tests ausführen und sehen, welche Abschnitte Sie von der Anmeldung abhängen können. Alle Tests tätigen Anrufe bei der ExampleController -Klasse.
Durchsuchen Sie http://localhost/auth und wenn Sie unter einem Benutzer angemeldet sind, sollten Sie Folgendes sehen.
Only authenticated cookie based requests from superusers receive this message.
Durchsuchen Sie http://localhost/superuser , und wenn Sie unter einem Benutzer in superusers oder admins unter einem Benutzer angemeldet sind, sollten Sie Folgendes sehen.
Only authenticated cookie based requests from superusers receive this message.
Durchsuchen Sie http://localhost/admin und wenn Sie unter einem Benutzer in admins angemeldet sind, sollten Sie Folgendes sehen.
Only authenticated cookie based requests from admins receive this message.
Der erste Befehl erhält ein Token, das für nachfolgende Anfragen benötigt wird. Im folgenden Beispiel wird der admin mit dem password verwendet. Es gibt jedoch andere Anmeldungen, die unterschiedliche Ergebnisse liefern.
curl -X POST http://localhost:5000/api/login -H "Content-Type: application/x-www-form-urlencoded" -d "Name=admin&Password=password"
Der obige Befehl sollte zu etwas ähnlich wie folgt führen (offensichtlich wird der Token -Wert unterschiedlich sein).
{
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbkBkb21haW4iLCJqdGkiOiJkNGM5MDE0Zi0zOGYxLTQ3NTItODU3YS03ZTc0YzU0MjY3ZDciLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJhZG1pbnMiOiIxIiwic3VwZXJ1c2VycyI6IjIiLCJ1c2VycyI6IjMiLCJleHAiOjE1MDQzODk0NTEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9hcGkvIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwL2FwaS8ifQ.gFnf39Vj16vEmcI1HdwPajH6sRHusxtjZ2eh0Xc1cJs"
}
Der Token -Wert wird dann mit nachfolgenden Anforderungen verwendet. Für die folgenden Beispiele ersetzen Sie TOKEN_VALUE durch den Wert, den aus dem obigen Schritt erhalten wird.
curl http://localhost:5000/api/auth -H "Authorization: Bearer TOKEN_VALUE"
Egal welcher Benutzer Ihr Token ist, denn Sie sollten Folgendes sehen.
Only authenticated token based requests receive this message.
Der folgende Test funktioniert für Benutzer in superusers oder admins .
curl http://localhost:5000/api/superuser -H "Authorization: Bearer TOKEN_VALUE"
Der obige Befehl sollte Folgendes erzeugen.
Only authenticated token based requests from superusers receive this message.
Der folgende Test funktioniert für Benutzer in admins .
curl http://localhost:5000/api/admin -H "Authorization: Bearer TOKEN_VALUE"
Der obige Befehl sollte Folgendes erzeugen.
Only authenticated token based requests from admins receive this message.
Das folgende Beispiel veranschaulicht das Manipulieren des JWT, der Code befindet sich in der TokenInfo -Methode der ExampleController -Klasse.
curl http://localhost:5000/api/tokeninfo -H "Authorization: Bearer TOKEN_VALUE"
Jeder authentifizierte Benutzer sollte mit etwas ähnlichem wie folgt präsentiert werden.
{
"token":{
"actor":null,
"audiences":[
"http://localhost:5000/api/"
],
"claims":[
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"sub",
"value":"admin@domain",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"jti",
"value":"f85815ae-69c4-4fec-8553-bc1199e3cdce",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
"value":"admin",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"admins",
"value":"1",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"superusers",
"value":"2",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"users",
"value":"3",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"exp",
"value":"1504392381",
"valueType":"http://www.w3.org/2001/XMLSchema#integer"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"iss",
"value":"http://localhost:5000/api/",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
},
{
"issuer":"http://localhost:5000/api/",
"originalIssuer":"http://localhost:5000/api/",
"properties":{
},
"subject":null,
"type":"aud",
"value":"http://localhost:5000/api/",
"valueType":"http://www.w3.org/2001/XMLSchema#string"
}
],
"encodedHeader":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
"encodedPayload":"eyJzdWIiOiJhZG1pbkBkb21haW4iLCJqdGkiOiJmODU4MTVhZS02OWM0LTRmZWMtODU1My1iYzExOTllM2NkY2UiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJhZG1pbnMiOiIxIiwic3VwZXJ1c2VycyI6IjIiLCJ1c2VycyI6IjMiLCJleHAiOjE1MDQzOTIzODEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9hcGkvIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwL2FwaS8ifQ",
"header":{
"alg":"HS256",
"typ":"JWT"
},
"id":"f85815ae-69c4-4fec-8553-bc1199e3cdce",
"issuer":"http://localhost:5000/api/",
"payload":{
"sub":"admin@domain",
"jti":"f85815ae-69c4-4fec-8553-bc1199e3cdce",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name":"admin",
"admins":"1",
"superusers":"2",
"users":"3",
"exp":1504392381,
"iss":"http://localhost:5000/api/",
"aud":"http://localhost:5000/api/"
},
"innerToken":null,
"rawAuthenticationTag":null,
"rawCiphertext":null,
"rawData":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbkBkb21haW4iLCJqdGkiOiJmODU4MTVhZS02OWM0LTRmZWMtODU1My1iYzExOTllM2NkY2UiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJhZG1pbnMiOiIxIiwic3VwZXJ1c2VycyI6IjIiLCJ1c2VycyI6IjMiLCJleHAiOjE1MDQzOTIzODEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9hcGkvIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwL2FwaS8ifQ.AXpvgAE3ZFN8EnRVSkLUt0iCaFTySFnMTfSx_kWYFDk",
"rawEncryptedKey":null,
"rawInitializationVector":null,
"rawHeader":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
"rawPayload":"eyJzdWIiOiJhZG1pbkBkb21haW4iLCJqdGkiOiJmODU4MTVhZS02OWM0LTRmZWMtODU1My1iYzExOTllM2NkY2UiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJhZG1pbnMiOiIxIiwic3VwZXJ1c2VycyI6IjIiLCJ1c2VycyI6IjMiLCJleHAiOjE1MDQzOTIzODEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9hcGkvIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwL2FwaS8ifQ",
"rawSignature":"AXpvgAE3ZFN8EnRVSkLUt0iCaFTySFnMTfSx_kWYFDk",
"securityKey":null,
"signatureAlgorithm":"HS256",
"signingCredentials":null,
"encryptingCredentials":null,
"signingKey":null,
"subject":"admin@domain",
"validFrom":"0001-01-01T00:00:00",
"validTo":"2017-09-02T22:46:21Z"
}
}
Die Adresse http://localhost/auth ist sowohl für Cookie- als auch für JWT -basierte Anmeldungen verfügbar, und der Benutzer sollte nach der Ausführung die folgende Nachricht sehen.
Only authenticated requests receive this message.