2016-05-31 39 views
0

我有這個非常簡單的用例:通接收的令牌從一個服務到另一個

  • 資源所有者使用我的角客戶端從IDP獲得JWT令牌
  • 角客戶端調用服務A(的WebAPI)由IDP
  • 角客戶端調用服務B(的WebAPI)與IDP發出的訪問令牌

我想支持以下情形發出的訪問令牌:

  • 有無服務行動的授權,如角客戶端和直通的訪問令牌收到作出服務B鍵

所以基本上,服務B可以直接由角客戶端調用或服務A.在這兩種情況下,必須提供一個不記名令牌才能訪問任何WebAPI端點。

從服務A,我不知道如何存儲提供的令牌,以便稍後當我需要使用HttpClient來調用服務B時,​​我可以設置Bearer標頭。

+0

你能否解釋一下爲什麼你需要存儲的令牌服務器端?您是否需要在沒有用戶干預的情況下執行請求(例如計劃任務)? –

+0

假設服務B提供了服務A依賴的某些功能。因此,當用戶呼叫服務A時,我想使用相同的令牌(來自服務A)來呼叫服務B.所以基本上服務A使用它所需的令牌,然後通過令牌傳遞給服務B. –

回答

1

如果我正確理解,您的要求是調用第二API(服務B)作爲來自經過認證的用戶的單個請求服務A的一部分。

如果是這種情況,那麼我相信沒有任何理由來存儲令牌服務器端,你可能只是需要從當前請求的Authorization頭和再利用它來調用服務B

某些代碼可能有助於解釋我的意思,假設ControllerA服務A控制器:

public class ControllerA : ApiController 
{ 
    public async Task<IHttpActionResult> GetFromB() 
    { 
     var token = Request.Headers.Authorization.Parameter; 

     MyModel result = null; 

     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Authorization = 
       new AuthenticationHeaderValue("Bearer", token); 

      var response = await client.GetAsync("http://serviceb/controllerb/actionb"); 
      response.EnsureSuccessStatusCode(); 
      result = await response.Content.ReadAsAsync<MyModel>(); 
     } 

     return Ok(result); 
    } 
} 
+0

是的,那正是我需要的。我沒有意識到OWIN中間件保存了授權信息。謝謝! –

相關問題