Я использую модуль Bearer Token для защиты модуля API.
Как я могу получить свойство IHttpContext.User для текущего пользователя, чтобы я мог получить к нему доступ в моих контроллерах?
Вот соответствующая часть настройки веб-сервера:
WebServerEmbedded
.WithCors()
.WithBearerToken("/api", "0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9eyJjbGF", new MyAuthorizationServerProvider())
.WithModule(webApiModule)
, а вот MyAuthorizationServerProvider:
internal sealed class MyAuthorizationServerProvider: IAuthorizationServerProvider
{
public async Task ValidateClientAuthentication(ValidateClientAuthenticationContext context)
{
var data = await context.HttpContext.GetRequestFormDataAsync().ConfigureAwait(false);
if (data?.ContainsKey("grant_type") == true && data["grant_type"] == "password")
{
var username = data.ContainsKey("username") ? data["username"] : string.Empty;
var password = data.ContainsKey("password") ? data["password"] : string.Empty;
if (ValidateCredentials(username, password))
{
context.Validated(username);
}
else
{
context.Rejected();
}
}
else
{
context.Rejected();
}
}
public long GetExpirationDate() => DateTime.UtcNow.AddHours(12).Ticks;
private static bool ValidateCredentials(string username, string password)
{
var user = BusinessLayer.CheckUserAndPassword(username, password);
return user != null;
}
}
Спасибо.