Ich habe ein Asp.net Web-API-2-Projekt. In diesem Projekt verwende ich OWIN-Authentifizierung. Ich habe zwei Arten von Benutzern.Verwenden Sie zwei Möglichkeiten, um Bearer-Token für Benutzer in Web-API 2 mit owin Kontext zu erstellen
Eine Art von sind diejenigen, die sich mit Benutzername und Passwort anmeldet, ein anderer Typ sind diejenigen, die sich mit Handynummer und einem vierstelligen Wort anmeldet.
Ich möchte diese beiden Benutzer gehen die Adresse/Token ihre Token zu bekommen, meine Implementierung so weit wie folgt aus:
Dies ist Startklasse:
var provider = new AuthorizationServerProvider();
var options = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = provider
};
public class AuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
}
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
using (DbContext dbContext = new DbContext())
{
var user = dbContext.User
.Where(a => a.UserName == context.UserName)
.Where(a => a.Password == context.Password)
.Select(a => new UserClaim
{
Id = a.Id,
UserName = a.UserName,
FirstName = a.FirstName,
LastName = a.LastName,
Roles = a.UserInRoles.Select(w => w.Role.Id).ToList()
}).FirstOrDefault();
if (user == null)
{
context.SetError("invalid grant", "Provided username and password is incorrect.");
return;
}
identity.AddUserClaim(user);
context.Validated(identity);
return;
}
}
}
Diese Lösung für den Anwender ist Wer möchte sich mit dem Benutzernamen anmelden, aber was ist mit den Benutzern, die sich mit der Handynummer anmelden wollen? Was soll ich tun?
Sie sollten mehrere 'OAuthAuthorizationServerProvider' zu Ihrer Pipeline hinzufügen können. Erstelle einfach zwei, einen für Benutzername/Passwort und einen für Handy/Pin. Prüfen Sie bei jedem Anbieter, ob das eine oder das andere verwendet wird. – Michael