[英]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.