Ich versuche stateless Auth für meine API mit Nancy zu implementieren, aber ich habe ein Problem nach der sample stateless project aufgetreten. Wenn ich meine schaffen StatelessAuthenticationConfigurationNancy Stateless Auth Config akzeptiert keine IPrincpal
new StatelessAuthenticationConfiguration(nancyContext =>
{
var apiKey = JsonConvert.DeserializeObject<ApiKeyModel>(nancyContext.Request.Body.AsString()).ApiKey;
return GetUserFromApiKey(apiKey);
});
es gibt mir eine Fehlermeldung über nicht in der Lage zu sein implizit die IPrincipal
internal static IPrincipal GetUserFromApiKey(string apiKey)
{
using (var con = GetConnection())
{
using (var cmd = con.CreateCommand())
{
Console.WriteLine($"Key: {apiKey}");
cmd.CommandText = $"SELECT username FROM apiKeys WHERE apiKey = {apiKey}";
string username = (string)cmd.ExecuteScalar();
if (string.IsNullOrWhiteSpace(username))
return null;
else
return new ClaimsPrincipal(new GenericIdentity(username, "stateless"));//new UserModel(username);
}
}
}
Ich gebe es zu werfen. Ich habe versucht, zu IUserIdentity
Casting und auch meine eigenen UserModel
class UserModel : IUserIdentity
{
public string UserName { get; }
public IEnumerable<string> Claims { get; }
public UserModel(string username)
{
UserName = Uri.EscapeDataString(username);
}
}
Umsetzung IUserIdentity
verwenden. Dies ergibt keinen Fehler, aber der Benutzer wird nicht authentifiziert. Der Benutzer kann immer noch nicht meinen Zugang secure module
public class APIModule : NancyModule
{
public APIModule() : base("/api")
{
StatelessAuthentication.Enable(this, Aoba.StatelessConfig);
this.RequiresAuthentication();
Post["/"] = _ =>
{
Console.WriteLine(Context.CurrentUser.IsAuthenticated());
return new Response { StatusCode = HttpStatusCode.OK };
};
}
}
obwohl es vorbei an all der erforderlichen Validierung zu machen und eine korrekte apikey hat. Nach meinen Tests scheint es, dass der Benutzer niemals dem Nancy-Kontext zugewiesen wird. Die Konfiguration wird verwendet und der Benutzer wird über den apiKey erhalten, aber er wird nie eingestellt. Gibt es etwas, das mir fehlt? Vollständiges Projekt kann here gefunden werden, wenn Sie das Projekt weiter untersuchen möchten.
Zeigen Sie uns Ihren Code. –
@MAdeelKhalid Der Code wurde verlinkt, aber ich habe ihn jetzt auch inline hinzugefügt. – TheDarkVoid