簡體   English   中英

OAuth承載訪問令牌滑動到期

[英]OAuth Bearer Access Token sliding expiration

我們假設我們使用OAuth承載令牌來保護我們的API。 有一個帶有OWIN中間件的NuGet包可以為我們做這些: https ://www.nuget.org/packages/Microsoft.Owin.Security.OAuth。

Everethig看起來很棒,直到提出有關訪問令牌到期的問題 - 我們不想強制使用重復登錄一遍又一遍。 據我了解,有三種基本方法:

  1. 使訪問令牌到期時間非常大(例如1個月)
  2. 使用OAuth刷新令牌會給身份驗證服務器和用戶應用程序代碼帶來很多困難(請參閱以下文章http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using- asp-net-web-api-2-owin /

我很好奇是否有可能創建一個端點,該端點需要即將到期的訪問令牌,只需使用新的訪問令牌來模擬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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM