Bekommen Ansprüche von einem WebAPI Controller - JWT Token,
Ich gebaut habe, eine Anwendung, die verwendet JWT Träger-Authentifizierung in ASP.NET Core. Bei der Authentifizierung definiere ich einige eigene Ansprüche, die ich Lesen müssen, in eine andere WebAPI-controller, um die Ausführung mancher Aktionen.
Irgendwelche Ideen, Wie Kann ich das erreichen?
Diese, wie mein code sieht wie folgt aus:(Code wurde vereinfacht)
public async Task<IActionResult> AuthenticateAsync([FromBody] UserModel user)
{
..............
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_appSettings.Secret);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim("userSecurityKey", userDeserialized.SecurityKey.ToString()),
new Claim("timeStamp",timeStamp),
new Claim("verificationKey",userDeserialized.VerificationKey.ToString())
}),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
.................
}
Einem anderen controller: (Muss Es Lesen "verificationKey" fordern.)
[HttpGet]
[Route("getcandidate")]
public async Task<IActionResult> GetCandidateAsync()
{
try
{
............
var verificationKey = //TODO: GET VerificationKey FROM THE TOKEN
var verificationRecord = await service.GetVerificationRecordAsync(verificationKey);
.................
}
catch (Exception)
{
return NotFound();
}
}
InformationsquelleAutor D.B | 2017-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage, zum abrufen der Ansprüche wie diese mit dem controller
Wenn Sie wollten, könnten Sie schreiben, extension-Methoden für die IPrincipal-Schnittstelle und abrufen von Ansprüchen mit den obigen code, dann rufen Sie mit (beispielsweise)
Für die Vollständigkeit der Antwort. Zum Decodieren des JWT token schreiben wir eine Methode zur Validierung der token und die Informationen extrahieren.
Nun können wir überprüfen, und extrahieren Sie die Ansprüche mit:
ValidateToken(tokenString)?.FindFirst("ClaimName")?.Value
Sollten Sie beachten, dass die "validatetoken" - Methode zurück
null
Wert, wenn die Validierung fehlschlägt.InformationsquelleAutor Adriani6
InformationsquelleAutor avg_bloke
Gibt es ein paar JWT Implementierungen für .NET-Framework. Wenn Sie System.IdentityModel.Token.Jwt, wenn Sie überprüfen Sie den token erhalten Sie eine System.Sicherheit.Ansprüche."ClaimsPrincipal", speichert die token-Ansprüche in Ihren "Forderungen" - Eigenschaft. So können Sie die token-Ansprüche wie folgt:
Nun, wo siehst du diesen code? Meine Wahl war die Umsetzung der token-Validierung als Berechtigungs-filter-Attribut abgeleitet von AuthorizationFilterAttribute. Wenn Sie schmücken ein controller mit dem Attribut, dessen OnAuthorization Methode ausgeführt wird vor jedem Aufruf der Steuerung der Endpunkte. Platzieren Sie den obigen code auf der OnAuthorization Methode, und speichern Sie den AUFTRAGGEBER zurückgegeben, indem die token-Validierung auf HttpContext.Aktuelle.Benutzer, das auch zugänglich auf einem beliebigen Endpunkt auf Ihre API. http://blogs.quovantis.com/json-web-token-jwt-with-web-api/ ist ein schönes Beispiel für diese Umsetzung.
InformationsquelleAutor GBU