5

Tôi đang sử dụng dòng Authorization Mã cho một Identity Server 3 khách hàng của tôi và nó được cấu hình như sau:nhận dạng Server 3 refresh thẻ hết hạn trước khi thời gian hết hạn của nó đặt trong cấu hình client

ClientId = "tripgalleryauthcode", 
ClientName = "Trip Gallery", 
Flow = Flows.AuthorizationCode, 
AllowAccessToAllScopes = true, 
RequireConsent = false, 

// redirect = URI of our callback controller in the IOS application 
RedirectUris = new List<string> 
{ 
    "somecallbackuri" 
},   

ClientSecrets = new List<Secret>() 
{ 
    "somesecret" 
}, 

// refresh token options 
AccessTokenType = AccessTokenType.Jwt, 
AccessTokenLifetime = 120, 
RefreshTokenUsage = TokenUsage.OneTimeOnly, 
RefreshTokenExpiration = TokenExpiration.Absolute, 
AbsoluteRefreshTokenLifetime = 360, 

Như bạn có thể nhìn thấy , Nó được định cấu hình để hết hạn mã thông báo truy cập trong 2 phút và mã thông báo làm mới sau 6 phút. Tôi đã làm điều này bởi vì tôi muốn cố gắng gỡ lỗi vấn đề trong một khung thời gian nhỏ hơn thay vì cái mà tôi sử dụng trong sản xuất: 15 ngày cho mã thông báo làm mới, 1 giờ cho mã thông báo truy cập. Chúng tôi nhận thấy rằng vì một số lý do, mã thông báo làm mới được phát hành hôm nay không hoạt động vào ngày mai. Đó là lý do tại sao tôi quyết định giảm thời gian và đây là những gì đã xảy ra:

  1. Tại 13:05 tôi đã làm mới yêu cầu token và nhận refres mới và thẻ truy cập
  2. Bây giờ tôi mong đợi dấu hiệu làm mới của tôi hết hạn lúc 1:11 PM
  3. Tại 1:10 PM Tôi gọi tới điểm cuối mã thông báo bằng cách sử dụng loại cấp phép refresh_token cố gắng truy cập mới và mã thông báo làm mới. Điều xảy ra là tôi nhận được lỗi HTTP 400 nói rằng đây là invalid_grant.

Tôi đã nhận thấy nhiều hơn một chút. Điều gì xảy ra là 2 phút sau khi hết hạn mã thông báo truy cập tôi nhận được lỗi 400. Nó nói mã thông báo làm mới không hợp lệ.

Đây là nhật ký từ Máy chủ nhận dạng.

w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Start token request 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Client secret id found: "tripgalleryauthcode" 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Client validation success 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Start token request validation 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.802 +00:00 [Information] Start validation of refresh token request 
w3wp.exe Warning: 0 : 2016-11-23 10:56:15.802 +00:00 [Warning] "Refresh token has expired" 
"{ 
    \"ClientId\": \"tripgalleryauthcode\", 
    \"ClientName\": \"Trip Gallery\", 
    \"GrantType\": \"refresh_token\", 
    \"RefreshToken\": \"d12f50289e5cded13082de989a64ac01\", 
    \"Raw\": { 
    \"grant_type\": \"refresh_token\", 
    \"refresh_token\": \"d12f50289e5cded13082de989a64ac01\" 
    } 
}" 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.818 +00:00 [Information] End token request 
w3wp.exe Information: 0 : 2016-11-23 10:56:15.818 +00:00 [Information] Returning error: invalid_grant 

Tôi thực sự muốn biết nguyên nhân gây ra hành vi đó và điều gì khiến mã thông báo hết hạn của tôi hết hạn trước hạn chót.

Trả lời

1

Lý do tại sao điều này xảy ra là do có tính năng nghiêng đồng hồ được tích hợp vào JWT để bảo vệ bạn khỏi đồng hồ đồng bộ hóa. Nếu không có điều này, bạn có thể gặp phải sự cố khi mã thông báo không hợp lệ.

Giá trị mặc định cho điều này là 5 phút - điều này ảnh hưởng đến access_token cũng như refresh_token.

Bạn có thể thay đổi giá trị này với JwtBearerOptions.TokenValidationParameters.ClockSkew, trong IdentityServer4.AccessTokenValidation.CombinedAuthenticationOptions

Hành vi này cũng được quy định trong official JWT Draft:

Implementers THỂ cung cấp cho một số mất nhiều thời gian nhỏ, thường không quá một vài phút, tính đến độ lệch đồng hồ. Giá trị của nó PHẢI là một số chứa giá trị IntDate. Yêu cầu này là TÙY CHỌN.

+0

Vui lòng xem chủ đề này http://stackoverflow.com/questions/43249912/identity-server-by-leastprivilege-doesnt-work-properly-on-azure – user2128702

Các vấn đề liên quan