2015-04-14 30 views
0

我正在使用OAuth/Owin生成一個令牌,並且該令牌在請求的授權標頭中發回;它會自動進行比較,這就是我如何驗證請求是否來自有效用戶。令牌具有承載類型。用來生成令牌關於在web api中使用的oAuth令牌

守則如下:

private string GenerateAuthToken(TelephonyLoginCdto loginDto, double tokenExpirationTimeInHours) 
     { 
      //Generate AuthToken 
      var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType); 
      identity.AddClaim(new Claim(ClaimTypes.Name, loginDto.Username)); 
      var currentUtc = DateTime.UtcNow; 
      var props = new AuthenticationProperties() 
      { 
       IssuedUtc = currentUtc, 
       ExpiresUtc = currentUtc.Add(TimeSpan.FromHours(tokenExpirationTimeInHours)) 
      }; 
      var ticket = new AuthenticationTicket(identity, props); 
      var accessToken = StartUp.OAuthBearerOptions.AccessTokenFormat.Protect(ticket); 
      return accessToken; 
     } 

外部系統將消耗我的API。 流程將爲: 1.外部系統首先命中登錄api。登錄api返回一個令牌。 2.外部系統使用該令牌並將其傳遞給另一個請求授權標頭使用API​​的另一種方法進行一些更新。

他們可以在一天中多次重複上述過程5〜6次。他們來打登錄;獲得令牌。通過調用API的save/get方法來使用該標記來執行一些操作。

我的問題是當外部系統長時間沒有打我的任何API方法,並且處於空閒狀態。現在如果外部系統必須擊中API執行某些操作,他們需要再次點擊登錄API才能獲取該令牌,然後使用其他API方法。如果他們這樣做更頻繁地說在10〜15分鐘內回覆令牌只需1〜2秒,但如果他們在2〜2.5小時後說,我的登錄API需要30秒才能返回令牌。

我沒有做任何刷新令牌機制,這種想法是需要這麼多時間,因爲已經生成了很多令牌,並且owin正在嘗試清理服務器,然後給出令牌。我不知道發生了什麼事?

+0

如果不知道可能是什麼原因,請嘗試記錄您的身份驗證機制。之後,在日誌中看看花了那麼多時間。 – Artiom

回答

1

你可能想看看AccessTokenExpireTimeSpan

訪問令牌在發佈後保持有效的時間段。 默認值是二十分鐘
客戶端應用程序預計會在令牌過期後刷新或獲取新的訪問令牌。

在你啓動,你應該有這樣的事情:

var OAuthOptions = new OAuthAuthorizationServerOptions 
{ 
    // AllowInsecureHttp = true, 
    TokenEndpointPath = new PathString("/oauth/Token"), 
    AccessTokenExpireTimeSpan = TimeSpan.FromHours(8), 
    Provider = new Providers.MyAuthorizationServerProvider(), 
    // RefreshTokenProvider = new Providers.MyRefreshTokenProvider(DateTime.UtcNow.AddHours(8)) 
}; 
app.UseOAuthAuthorizationServer(OAuthOptions); 
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

閱讀你的代碼看來你不遵守正確的管道線。 我建議你閱讀this文章,這將引導你完成整個過程。

關於最後一個關於api未被超過2小時的任何請求觸發的問題,可能會導致IIS(如果您在該環境中託管您的api)大喊大叫。

相關問題