首页 文章

OAuth承载访问令牌滑动到期

提问于
浏览
4

让's suppose that we'重新使用OAuth承载令牌来保护我们的API . 有一个带有OWIN中间件的NuGet包可以为我们做到:https://www.nuget.org/packages/Microsoft.Owin.Security.OAuth .

Everethig看起来很棒,直到提出有关 access token expiration 的问题 - 我们不想强行使用一遍又一遍地重新登录 . 据我了解,有三种基本方法:

我很好奇是否有可能创建一个 endpoints ,该 endpoints 需要即将到期的访问令牌,只需使用新的访问令牌来模拟OAuth访问令牌的滑动过期类型?

1 回答

  • 1

    WARNING! 如果您不能100%确定您的应用程序保证(这是不可能的)访问令牌无法进行编译(例如,XSS漏洞允许窃取访问令牌),那么这就是 NO ONE SHOULD USE 的解决方案 . 在此解决方案中,一旦访问令牌泄露,它可用于延长访问时间 . 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)
            };
        }
    }
    

相关问题