簡體   English   中英

Asp.NET核心Controller如何調用外部URL?

[英]How to call external URL in Asp.NET Core Controller?

這些天我正在研究 SSO,我們有一個主應用程序,我們稱之為 A,用戶從那里登錄,然后使用 SSO 用戶可以訪問與應用程序 A 相關的多個應用程序。如果用戶從應用程序 A 注銷,那么用戶應該注銷從所有關聯的應用程序以及然后重定向回 A 的登錄頁面。 我遇到的問題是一個應用程序 B 與應用程序 A 相關聯。要注銷此應用程序 (B),我們必須點擊 url 注銷應用程序 B。問題是當我從瀏覽器點擊此 url 時,應用程序B 注銷成功,但是當我嘗試從代碼注銷中點擊 url 時不起作用。 我嘗試了以下解決方案,但它不起作用

  1. 我嘗試使用 web 請求來訪問 url。
  2. 我試過 Response.Redirect、Redirect、RedirectToAction。
  3. 當我使用下面的代碼時它可以工作,但我不希望用戶在從主應用程序注銷時看到當前用戶查看的應用程序 B 的注銷頁面。

我不希望用戶看到應用程序 B 注銷頁面,而是應該看到應用程序 A 注銷頁面。 有什么方法可以擊中 url 以便它注銷應用程序 b? 下面是我的代碼。 有人告訴我在隱藏的 i-frame 中打開這個 url。 我不知道如何在 controller 中執行此操作。 下面是代碼

塊引用

        public IActionResult Logout() {
   
        string urlLogout = "application/logout.action";
         
          var abc = Redirect(urlLogout); //it's is not working

         return Redirect(urlLogout); //it work's fine 

        }

使用HttpClient擊中 url。

一個例子如下:

static readonly HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("application/logout.action");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

請記住,您應該創建完整的請求。 這意味着您需要將標頭和 cookies 添加到請求中。

添加授權 header 的示例(這是用於客戶端憑據流,但您了解它的要點)。

client.DefaultRequestHeaders.Authorization 
                         = new AuthenticationHeaderValue("Bearer", "Your Oauth token");

評論后編輯

如果以上都不起作用,說明應用B的登出頁面在客戶端做了一些動作。

  1. 如果信息存儲在那里,它可能會刪除 cookies。 這無法通過應用程序 1 controller 實現,因為出於安全原因,每個主機名都可以訪問 cookies。
  2. 它可能正在執行 XHR 簽核 http 調用。 在這種情況下,您很幸運,因為您可以從瀏覽器控制台中識別它並從您自己的 c# 代碼中執行它

在最壞的情況下,您可以在應用程序 B 中創建一個簽核操作,您可以從 c# 調用該操作並使 session 無效。 當用戶嘗試使用無效的 session 訪問應用程序 B 時,返回 401 錯誤並適當處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM