Я предоставляю конечную точку для интеграции с третьей стороной, и они требуют от меня авторизации их запросов к моей конечной точке на основе ключа, переданного в публикуемом теле.Затем мой код должен подтвердить, что переданный ключ соответствует некоторому заданному значению на моей стороне.Поступающая модель будет выглядеть примерно так:
public class RequestBase
{
public string ApiKey { get; set; }
...
}
Изучение вариантов Авторизация в ASP.NET Core Я не вижу совпадения с тем, что я пытаюсь сделать.Я думаю, что пользовательский AuthorizeAttribute из этот вопрос будет работать, но мне не повезло, и я получаю 401 независимо от того, что я делаю.Вот что у меня есть:
[AttributeUsage(AttributeTargets.Class)]
public class MyAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
{
private static IEnumerable<string> _apiKeys = new List<string>
{
"some key... eventually will be dynamic"
};
public void OnAuthorization(AuthorizationFilterContext context)
{
var req = context.HttpContext.Request;
req.EnableRewind();
using (var reader = new StreamReader(req.Body, Encoding.UTF8, true, 1024, true))
{
var bodyStr = reader.ReadToEnd();
var isAuthorized = _apiKeys.Any(apiKey => bodyStr.Contains(apiKey));
if (!isAuthorized)
{
context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
return;
}
}
req.Body.Position = 0;
}
}
Когда ключ не найден в теле, возвращается 403, как и ожидалось.Однако, когда ключ найден, результат, который я получаю, все равно остается 401. Почти кажется, что вызывается base.OnAuthorization.У меня есть другие конечные точки, которые используют стандартный AurhorizeAttribute.Они работают, как и ожидалось, только если я передаю JWT.
Вопросы:
- Я на правильном пути с пользовательским атрибутом AuthorizeAttribute или естьлучший способ?
- Если клиент AuthorizeAttribute - правильный путь ... что мне не хватает?
Цените любую помощь!