2017-07-15 143 views
1

我有一個IdentityServer4和一個作爲同一項目和一個MVC客戶端一起運行的API的設置。這可以正常工作,但是在某些時候,客戶端會調用API,並且會返回驗證錯誤(401),因爲訪問令牌無法正常工作。在這種情況下,我希望客戶端調用服務器上的登錄頁面,以便用戶可以重新輸入其憑據,然後重定向回客戶端。當API返回認證失敗時重定向到登錄

string accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 
using (HttpClient client = new HttpClient())  
    client.SetBearerToken(accessToken); 
    HttpResponseMessage response = await client.GetAsync("http://apiserver/method"); 
    if (response.IsSuccessStatusCode) { 

     string content = await response.Content.ReadAsStringAsync(); 
     forum = JsonConvert.DeserializeObject<Data>(content); 
    } else { 
     return Redirect(... url to server login with return URL here ...) 
    } 
} 

我不清楚如何生成網址與正確的道路服務器和查詢到正確驗證,並返回給客戶端。我瀏覽了文檔和示例,但似乎沒有解決這種情況。

我不清楚如何使用正確的路徑和查詢來正確地進行身份驗證並返回給客戶端,從而生成到服務器的URL。我瀏覽了文檔和示例,但似乎沒有解決這種情況。

回答

1

當您從api獲得未經授權的訪問狀態代碼401時,您必須先將用戶註銷。通過將它們註銷,它將清除cookie並將其從oidc註銷。這將重定向應用程序到您的登錄頁面,因爲沒有cookie可以在客戶端進行身份驗證。

await HttpContext.Authentication.SignOutAsync("Cookies"); 
await HttpContext.Authentication.SignOutAsync("oidc"); 

另一種方法是檢查您的訪問令牌是否已經過期,即在進行api調用之前。這將爲您節省額外的http呼叫。但這取決於您的應用程序要求。

+0

就是這樣。謝謝!簽出響應身份驗證問題可以解決問題並不明顯,但我沒有清楚地思考。 :-) –

相關問題