C# 过期刷新令牌WebApi的自定义消息

C# 过期刷新令牌WebApi的自定义消息,c#,owin,katana,C#,Owin,Katana,当令牌过期时,除了通常的Status:400响应和body消息“Error”:“invalid_client”外,是否有任何方法更改状态代码和body以显示其他内容 目前,我已设法对标题进行了如下处理: public async Task ReceiveAsync(AuthenticationTokenReceiveContext context) { AuthenticationTicket ticket; if (_refreshTokens.Tr

当令牌过期时,除了通常的Status:400响应和body消息“Error”:“invalid_client”外,是否有任何方法更改状态代码和body以显示其他内容

目前,我已设法对标题进行了如下处理:

 public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
    {
        AuthenticationTicket ticket;

        if (_refreshTokens.TryRemove(context.Token, out ticket))
        {
            if (ticket.Properties.ExpiresUtc.HasValue && ticket.Properties.ExpiresUtc.Value.LocalDateTime < DateTime.Now)
            {
                context.Response.Headers.Add("Expired", new string[] { "Yes" });
            }

            context.SetTicket(ticket);

        }

    }
公共异步任务ReceiveAsync(AuthenticationTokenReceiveContext上下文) { 认证票证; if(_refreshtokes.TryRemove(context.Token,out ticket)) { if(ticket.Properties.ExpiresUtc.HasValue&&ticket.Properties.ExpiresUtc.Value.LocalDateTime 有人帮忙吗


谢谢。

您可以实现自定义ASP.NET WebApi(如果希望对所有请求进行验证)或(如果希望对特定请求/每个端点进行验证),以检查令牌是否仍然有效并中断请求以返回更有意义的响应。有关详细信息,请参阅链接

我已经实现了一个简单的方法供您参考:

public class CustomTokenCheckMessageHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (HasMyTokenExpired())
        {
            return new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.Unauthorized,
                ReasonPhrase = "",
                Content = new StringContent("Test") // See HttpContent for more https://msdn.microsoft.com/en-us/library/system.net.http.httpcontent(v=vs.118).aspx
            };
        }

        return await base.SendAsync(request, cancellationToken);
    }

    public bool HasMyTokenExpired()
    {
        //Your custom logic here
        return true;
    }
}

嗨,Martin,谢谢你的回复,但是我似乎不知道如何在Owin和OAuth2.0实现中应用它。MessageHandler(来自委派处理程序链接)似乎不适用,因为webapi配置发生在app.useAuthAuthorization之后,ActionFilter似乎也是如此。请再次查看我的答案。我添加了一个简单的示例供您参考。嗨,Martin,我使用的是Katana,不使用webApiConfig类。相反,我有一个startup类,当我有一个HttpConfiguration时,它已经在OAuth中间件之后了,这并不重要。不管怎样,您都应该能够注册委托处理程序,并在其中包含您自己的逻辑,因为您可以访问请求上下文、头等。
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        /*
            All other config goes here
        */

        //This line registers the handler
        config.MessageHandlers.Add(new CustomTokenCheckMessageHandler());
    }
}