У нас есть приложение ASP.NET Web Api, которое использует аутентификацию маркера OAuth для аутентификации, для которого мы пытаемся внедрить ведение журнала Request/Response.Как регистрировать запросы токена аутентификации в веб-интерфейсе ASP.NET
В основном это работает так:
1. Пользователь отправляет запрос на «/ аутентификации» и получает аутентификацию токенов затем
2. Пользователь использует этот маркер проверки подлинности запросов на открытых методов API
Для протоколирования запросы к открытым API-методам, мы используем DelegatingHandler
, который отлично работает.
Однако запросы, сделанные для «/ authenticate», не выполняются с помощью реализации DelegatingHandler
.
Существует ли другой подход для регистрации запросов на токены?
public abstract class MessageHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var correlationId = Guid.NewGuid();
var requestInfo = string.Format("{0} {1}", request.Method, request.RequestUri);
var requestContent = await request.Content.ReadAsByteArrayAsync();
var context = ((HttpContextBase)request.Properties["MS_HttpContext"]);
await IncomingMessageAsync(correlationId, request.Method, request.RequestUri, request.Headers, requestContent,
context.Request.UserHostAddress, context.Request.IsAuthenticated, context.User.Identity.Name);
var response = await base.SendAsync(request, cancellationToken);
byte[] responseMessage;
responseMessage = await response.Content.ReadAsByteArrayAsync();
await OutgoingMessageAsync(correlationId, response.StatusCode, response.Headers, responseMessage);
return response;
}
protected abstract Task IncomingMessageAsync(Guid correlationId, HttpMethod requestMethod, Uri requestUri, HttpRequestHeaders requestHeaders, byte[] messageContent, string ipAddress, bool isAuthenticated, string requestMadeByUserName);
protected abstract Task OutgoingMessageAsync(Guid correlationId, HttpStatusCode statusCode, HttpResponseHeaders responseHeaders, byte[] messageContent);
}
EDIT ж/OAuth Код
[assembly: OwinStartup(typeof(MyApp.Infrastructure.IdentityConfig))]
namespace MyApp.Infrastructure
{
public class IdentityConfig
{
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext<ApplicationIdentityDbContext>(() => ApplicationIdentityDbContext.Create(ConfigurationDataProvider.MYDBCONNSTRING));
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions
{
Provider = new ApplicationAuthProvider(),
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/Authenticate")
});
}
}
}
Возможно, вы можете использовать [OnResponseSignIn] (https://msdn.microsoft.com/en-us/library/microsoft.owin.security.cookies.cookieauthenticationprovider.onresponsesignin (v = vs.113) .aspx)? – DavidG
Спасибо за предложение Дэвида. Я не уверен, что это будет работать, поскольку мы используем OAuthBearerTokens вместо файлов cookie. – thiag0
Каким будет ваше промежуточное ПО OAuth, вы можете показать этот код? – DavidG