Nicht bekommen können, die Ansprüche von JWT token mit ASP.NET Kern
Ich versuche zu tun, eine wirklich einfache Umsetzung von JWT Träger-Authentifizierung mit ASP.NET Core. Habe ich wieder eine Antwort von einem controller ein bisschen wie diese:
var identity = new ClaimsIdentity();
identity.AddClaim(new Claim(ClaimTypes.Name, applicationUser.UserName));
var jwt = new JwtSecurityToken(
_jwtOptions.Issuer,
_jwtOptions.Audience,
identity.Claims,
_jwtOptions.NotBefore,
_jwtOptions.Expiration,
_jwtOptions.SigningCredentials);
var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);
return new JObject(
new JProperty("access_token", encodedJwt),
new JProperty("token_type", "bearer"),
new JProperty("expires_in", (int)_jwtOptions.ValidFor.TotalSeconds),
new JProperty(".issued", DateTimeOffset.UtcNow.ToString())
);
Habe ich Jwt middleware für eingehende ersuchen:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = tokenValidationParameters
});
Dieser scheint zu arbeiten, Ressourcen zu schonen, die mit " aktivieren Attribut, aber die Ansprüche, die nie auftauchen.
[Authorize]
public async Task<IActionResult> Get()
{
var user = ClaimsPrincipal.Current.Claims; //Nothing here
Haben Sie versucht
Context.User.Claims
?InformationsquelleAutor user888734 | 2016-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden
ClaimsPricipal.Current
in einem ASP.NET Core-Anwendung, wie es ist nicht von der Laufzeit. Sie können Lesen https://github.com/aspnet/Security/issues/322 für weitere Informationen.Stattdessen sollten Sie die
User
Eigenschaft, ausgesetzt vonControllerBase
.InformationsquelleAutor Pinpoint
Zugang
User.Claims
stattClaimsPrinciple.Current.Claims
.Von der Einführung zur Identität bei docs.asp.net:
Hier ist der entsprechende source-code vom MVC-repository:
InformationsquelleAutor Shaun Luttin
Als Teil der ASP.NET Core 2.0 ist, können Sie Lesen Sie die JWT Ansprüche wie Shaun oben beschrieben. Wenn Sie nur auf der Suche für die Benutzer-Id (stellen Sie sicher, dass Sie bereits fügen Sie es als Teil der Forderung, mit der "Sub" - Anspruch-name) dann können Sie die folgenden verwenden, um zwei Beispiele zu Lesen, die vom Anwendungsfall abhängig:
Lesen Sie die Benutzer-ID, ein Anspruch:
Lesen Sie Andere Ansprüche:
InformationsquelleAutor Tony
Durch diese Lösung können Sie den Zugriff auf
User.Identiy
und seine Ansprüche im Controller, wenn Sie mit Jwt Tokens:InformationsquelleAutor Morteza Zabihi