Ich implementieren derzeit eine tokenbasierte Authentifizierung mit Aktualisierungstokens in meiner .NET-App. Im Moment habe ich eine benutzerdefinierte RefreshTokens-Sammlung in meinem ApplicationUser:
public class ApplicationUser : IdentityUser
{
public virtual ICollection RefreshTokens { get; set; } = new List();
}
Mir ist aufgefallen, dass ASP.NET Identity standardmäßig eine AspNetUserTokens-Tabelle generiert. Erfinde ich hier das Rad neu? Könnte ich einfach die Token-Methoden von UserManager (SetAuthenticationTokenAsync/GetAuthenticationTokenAsync) verwenden, anstatt meinen eigenen Token-Dienst zu verwalten? Muss ich meinen eigenen TokenProvider implementieren?
public async Task LoginAsync(LoginPayload request)
{
var user = await userManager.FindByEmailAsync(request.Username);
if (user == null || !await userManager.CheckPasswordAsync(user, request.Password))
throw new Exception("Invalid email or password");
if(!user.EmailConfirmed)
throw new Exception("Email not confirmed");
var accessToken = tokenService.GenerateAccessToken(user);
var refreshToken = tokenService.GenerateRefreshToken();
user.RefreshTokens.Add(refreshToken);
await context.SaveChangesAsync();
return new LoginResponse(
accessToken,
refreshToken.Token,
(int)(refreshToken.ExpiresAt - DateTimeOffset.UtcNow).TotalMilliseconds,
user.UserName!
);
}
public async Task RefreshTokenAsync(string accessToken, string refreshToken)
{
var principal = tokenService.GetPrincipalFromExpiredToken(accessToken);
if (principal == null)
throw new Exception("Invalid access token");
var user = await userManager.FindByNameAsync(principal.Identity!.Name!);
if (user == null)
throw new Exception("User not found");
var existingToken = await context.RefreshToken
.FirstOrDefaultAsync(rt => rt.Token == refreshToken);
if (existingToken == null || existingToken.ExpiresAt < DateTime.UtcNow)
throw new Exception("Invalid or expired refresh token");
var newAccessToken = tokenService.GenerateAccessToken(user);
var newRefreshToken = tokenService.GenerateRefreshToken();
context.RefreshToken.Remove(existingToken);
user.RefreshTokens.Add(newRefreshToken);
await context.SaveChangesAsync();
return new LoginResponse(
newAccessToken,
newRefreshToken.Token,
(int)(newRefreshToken.ExpiresAt - DateTimeOffset.UtcNow).TotalMilliseconds,
user.UserName!
);
}
Ich implementieren derzeit eine tokenbasierte Authentifizierung mit Aktualisierungstokens in meiner .NET-App. Im Moment habe ich eine benutzerdefinierte RefreshTokens-Sammlung in meinem ApplicationUser: [code]public class ApplicationUser : IdentityUser { public virtual ICollection RefreshTokens { get; set; } = new List(); } [/code] Mir ist aufgefallen, dass ASP.NET Identity standardmäßig eine AspNetUserTokens-Tabelle generiert. Erfinde ich hier das Rad neu? Könnte ich einfach die Token-Methoden von UserManager (SetAuthenticationTokenAsync/GetAuthenticationTokenAsync) verwenden, anstatt meinen eigenen Token-Dienst zu verwalten? Muss ich meinen eigenen TokenProvider implementieren? [code] public async Task LoginAsync(LoginPayload request) { var user = await userManager.FindByEmailAsync(request.Username); if (user == null || !await userManager.CheckPasswordAsync(user, request.Password)) throw new Exception("Invalid email or password");
if(!user.EmailConfirmed) throw new Exception("Email not confirmed");
var accessToken = tokenService.GenerateAccessToken(user); var refreshToken = tokenService.GenerateRefreshToken();
public async Task RefreshTokenAsync(string accessToken, string refreshToken) { var principal = tokenService.GetPrincipalFromExpiredToken(accessToken); if (principal == null) throw new Exception("Invalid access token");
var user = await userManager.FindByNameAsync(principal.Identity!.Name!); if (user == null) throw new Exception("User not found");
var existingToken = await context.RefreshToken .FirstOrDefaultAsync(rt => rt.Token == refreshToken); if (existingToken == null || existingToken.ExpiresAt < DateTime.UtcNow) throw new Exception("Invalid or expired refresh token");
var newAccessToken = tokenService.GenerateAccessToken(user); var newRefreshToken = tokenService.GenerateRefreshToken();
Ich entwickle einen WebApp mit VueJs als Frontend und Azure als Backend. Diese App dient für die interne Nutzung des Unternehmens, also keine sozialen Netzwerkanmeldungen. Daher planen wir, eine...
Unser Team hat beschlossen, die Domain -gesteuerte Designarchitektur für unser Projekt zu verwenden. Jetzt geht die Diskussion für Können wir eine ASP.NET -Identität in DDD verwenden?
Ich brauche einige Anleitungen für das inkrementelle Migrationsaufbau mit Yarp -Proxy, insbesondere für die Einrichtung der Struktur in IIS. /> Virtuelle App auf Subdomain Customer1.domain.com -...
Unten ist ein kleiner Teil dessen, was ich ausführen möchte, er bleibt in der letzten Zeile hängen
k=2
elements =
Sk = PermutationGroup( )
factorial = int(sp.special.factorial(k))
for i in...
Unten ist ein kleiner Teil dessen, was ich ausführen möchte, er bleibt in der letzten Zeile hängen
k=2
elements =
Sk = PermutationGroup( )
factorial = int(sp.special.factorial(k))
for i in...