2017-08-01 50 views
1

我有以下情形,獲取服務授權承載的值堆

手機客戶端--->服務棧API(A)---> WCF服務(B)

我送一個來自移動客戶端的訪問令牌,作爲Http授權頭到服務棧API(B)我不需要在Auth提供者中使用服務棧構建,因爲我的服務棧API(A)只是WCF服務(B)的中間API。

我將授權標頭作爲HttpRequestMessageProperty發送給WCF服務(B)。我正在處理wcf服務端的其他驗證(B)。

  1. 我怎樣才能得到它是由移動客戶端 在服務棧方(A)發送,只是傳遞給其他服務(B)中的「訪問令牌」我 找不到任何關於一個適當的文件這個 。

  2. 如果我從服務(B)得到安全異常,我怎麼能有效地 在服務棧端(A)管理它。理想的情況是我希望檢查 例外,在一個地方,如果它是一個安全例外,我希望 返回401到移動客戶端的響應

  3. 什麼是管理令牌或憑證或其他 用戶相關的有效途徑服務內部的東西堆棧端?像會話 ?

任何人有什麼想法?

回答

1

訪問任何HTTP請求信息的方式是使用IRequest接口是隨處可見,在所有Request and Response FiltersFilter Attributes的說法,從服務和剃刀意見的base.Request財產等

的授權HTTP請求頭從HTTP請求頭集合,例如訪問:

var auth = httpReq.Headers[HttpHeaders.Authorization]; 

如果你想一般處理該問題的所有要求你通常使用Global Request Filter,你可以用它來驗證是否一個有效的授權頭被髮送,它是有效的,否則返回一個HTTP錯誤響應,例如:

this.GlobalRequestFilters.Add((req, res, requestDto) => { 
    var auth = req.Headers[HttpHeaders.Authorization]; 
    if (auth == null) 
    { 
     res.StatusCode = (int)HttpStatusCode.Unauthorized; 
     res.EndRequest(); 
    } 
    else if (!MyIsValid(auth)) 
    { 
     res.StatusCode = (int)HttpStatusCode.Forbidden; 
     res.EndRequest(); 
    } 
}); 
+0

謝謝:)我做了自定義服務亞軍的事情。我在「OnBeforeExecute」中使用上面的代碼片段。「HandleException」中的異常也是如此。 – Thabo