C# 过期刷新令牌WebApi的自定义消息
当令牌过期时,除了通常的Status:400响应和body消息“Error”:“invalid_client”外,是否有任何方法更改状态代码和body以显示其他内容 目前,我已设法对标题进行了如下处理: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
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());
}
}