2017-06-25 64 views
0

api在本地主機上運行,​​請求來自基於Angular2的應用程序,並且使用OWIN和OAuth 2.0保護api。我不知道我應該在這裏粘貼哪部分代碼,因爲我不知道問題出在哪裏。鏈接到令牌的ASP.NET API用戶永遠不會更改

情景: 用戶1個日誌在客戶端應用程序(從API請求令牌) 用戶1獲得令牌:XXXX ...... 用戶1尋找他的數據和從服務器 用戶得到他的數據傳回1註銷客戶端應用程序和承載的令牌從localStorage的

刪除

用戶2個日誌中(同一應用程序會話,同一服務器會話),並從API獲取一個Takon 用戶2得到令牌:YYYY ... 用戶2查找他的數據,但從用戶1獲取數據。

服務器獲取不同的令牌爲用戶2,但看着

User.Identity.GetUserId(); 

服務器仍然認爲它是當用戶1.

當登出我還調用API /帳號/註銷,但這樣做當我重新啓動本地主機服務器,並與用戶2登錄比我得到正確的數據,但隨後的情況是剛換不會改變任何東西

public IHttpActionResult Logout() 
    { 
     Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType); 
     return Ok(); 
    } 

(用戶1從用戶2得到的數據)。 如果您需要更多代碼(但是我沒有更改與AccountController相關的任何內容),請告訴我,我會查找它。

任何幫助表示讚賞。

謝謝

+0

API通常不具有註銷功能。令牌服務器將通過令牌驗證和識別客戶端,該令牌通常在一段時間後過期。我想重新設計身份驗證不是一種選擇? – Crowcoder

+0

@Crowcoder如果使用令牌找到了正確的用戶,並且我爲這兩個用戶獲得了兩個不同的令牌,爲什麼服務器告訴它它們都是同一個用戶?這是我不明白的。我知道註銷並不是真的需要,不同的令牌應該足以將其視爲不同的用戶 – lordvlad30

+0

沒有代碼是不可能分辨的。我認爲你可以通過它進行調試並找出結果。你不會得到任何(質量)答案,因爲它是無法回答的。 – Crowcoder

回答

0

從客戶端傳遞一些參數來檢查仍然是相同的用戶還是已經改變。如果是這樣,註銷並再次連接。

+0

對於「註銷並連接」又是什麼意思? – lordvlad30

+0

var AutheticationManager = HttpContext.Current.GetOwinContext()。Authentication; AuthenticationManager.SignOut(); –

0

恕我直言,你還在使用無記名用戶1令牌,這就是爲什麼服務器仍然認爲誰是用戶1訪問。

要檢查是否爲真,您可以使用[Authorize(Users =「user1」)] //或者您可以更改爲user2以檢查用戶1或2是否具有權限。