2017-02-24 52 views
2

我有一個應用程序使用OpenIddict進行令牌授權(訪問和刷新令牌),總的來說,它工作得很好。問題是我的用例使用同一個授權服務器有多種應用程序類型(網頁和手機)。我想爲不同的類型(可能使用不同的令牌端點)有不同的到期時間,但我無法找出一種方法來覆蓋使用SetAccessTokenLifetime和SetRefreshTokenLifetime設置的值。有沒有辦法做到這一點?有沒有辦法在OpenIddict中擁有不同的票證過期長度?

目標是爲web應用程序提供更長的訪問令牌長度,並讓用戶在到期時重定向到登錄(相當長的到期時間,例如小時)。在移動端,我想使用刷新令牌來保持用戶登錄。最佳做法似乎表明,在移動設備上,我應該有一個非常短的令牌過期(例如分鐘),且刷新令牌過期很長。

感謝, 傑森

回答

3

我想有不同的類型(很可能使用不同的令牌端點)不同的到期時間,但我不能想出一個辦法來超越SetAccessTokenLifetime設置的值和SetRefreshTokenLifetime。有沒有辦法做到這一點?

您可以直接從您的授權端點行動使用專用AuthenticationTicket擴展覆蓋全局令牌到期值:

// Create a new authentication ticket holding the user identity. 
var ticket = new AuthenticationTicket(principal, properties, 
    OpenIdConnectServerDefaults.AuthenticationScheme); 

ticket.SetAccessTokenLifetime(TimeSpan.FromMinutes(30)); 
ticket.SetAuthorizationCodeLifetime(TimeSpan.FromMinutes(1)); 
ticket.SetIdentityTokenLifetime(TimeSpan.FromMinutes(30)); 
ticket.SetRefreshTokenLifetime(TimeSpan.FromDays(2)); 
+0

完美,感謝定點! – Jason

+0

謝謝@Pinpoint – damir

相關問題