[英]OAuth Bearer Access Token sliding expiration
我们假设我们使用OAuth承载令牌来保护我们的API。 有一个带有OWIN中间件的NuGet包可以为我们做这些: https ://www.nuget.org/packages/Microsoft.Owin.Security.OAuth。
Everethig看起来很棒,直到提出有关访问令牌到期的问题 - 我们不想强制使用重复登录一遍又一遍。 据我了解,有三种基本方法:
我很好奇是否有可能创建一个端点,该端点需要即将到期的访问令牌,只需使用新的访问令牌来模拟OAuth访问令牌的滑动过期类型?
警告! 如果您不是100%确定您的应用程序保证(这是不可能的)访问令牌无法被编译(例如,XSS漏洞允许窃取访问令牌),那么这个解决方案是任何人都不应该使用的解决方案。 在此解决方案中,一旦访问令牌泄露,它可用于无限期地延长访问。 OAuth刷新令牌可以解决这个问题,在非常短的时间内(通常是大约15分钟)危及访问令牌的情况下限制访问。
[Authorize]
public class RefreshTokenController : ApiController
{
[HttpGet]
public HttpResponseMessage ReissueToken()
{
// just use old identity
var identity = ((ClaimsPrincipal)User).Identity as ClaimsIdentity;
var ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
DateTimeOffset currentUtc = new SystemClock().UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.AddMinutes(30);
string token = Startup.OAuthBearerAuthOptions.AccessTokenFormat.Protect(ticket);
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ObjectContent<object>(new
{
accessToken = token,
expiresIn = (int)((ticket.Properties.ExpiresUtc.Value - ticket.Properties.IssuedUtc.Value).TotalSeconds),
}, Configuration.Formatters.JsonFormatter)
};
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.