Ja, Sie können auf die Datenbank zugreifen! Code, der in der Configure
-Methode ausgeführt wird, kann auf alle Dienste zugreifen, die in der ConfigureServices
-Methode hinzugefügt werden, z. B. Datenbankkontexte.
Zum Beispiel, wenn Sie einen einfachen Entity Framework Kontext haben:
using Microsoft.EntityFrameworkCore;
using SimpleTokenProvider.Test.Models;
namespace SimpleTokenProvider.Test
{
public class SimpleContext : DbContext
{
public SimpleContext(DbContextOptions<SimpleContext> options)
: base(options)
{
}
public DbSet<User> Users { get; set; }
}
}
Und Sie fügen Sie es in ConfigureServices
:
services.AddDbContext<SimpleContext>(opt => opt.UseInMemoryDatabase());
Dann Sie darauf zugreifen können, wenn Sie die Middleware-Einrichtung werden :
var context = app.ApplicationServices.GetService<SimpleContext>();
app.UseSimpleTokenProvider(new TokenProviderOptions
{
Path = "/api/token",
Audience = "ExampleAudience",
Issuer = "ExampleIssuer",
SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
IdentityResolver = (username, password) => GetIdentity(context, username, password)
});
Und schreiben Sie die GetIdentity
Methode ein litt le:
private Task<ClaimsIdentity> GetIdentity(SimpleContext context, string username, string password)
{
// Access the database using the context
// Here you'd need to do things like hash the password
// and do a lookup to see if the user + password hash exists
}
Ich bin der Autor der ursprünglichen Probe. Sorry es war anfangs nicht klar! Ich habe versucht, den Delegierten IdentityResolver
auf eine Weise zu schreiben, die es einfach macht, eigene Funktionen bereitzustellen - wie die Integration in Ihre eigene Datenbank (wie oben) oder die Anbindung an die ASP.NET Core Identity. Natürlich kannst du meinen Code wegwerfen und auch etwas besseres tun. :)
Wenn Sie JWT aspnet Identität gerade erst hinzugefügt, können Sie die signinmanager anstelle des DbContext passieren kann: var userManager = app.ApplicationServices .GetService (typeof (UserManager)) –
xcud
@xcud Das ist genau das, was ich versuche, aber einen Fehler zu bekommen "Kann den Scoped Service 'Microsoft.AspNetCore.Identity.UserManager' nicht auflösen", Was fehlt mir hier? –