2017-03-15 43 views
0

我有一個使用IdentityServer3作爲服務身份驗證的項目。IdentityServer3 - 401在調用身份API控制器時未授權

最近我的任務是爲最終用戶創建一個無縫的體驗來編輯他們的身份信息。

我在我的應用程序中創建了一個API控制器,它使用HTTPClient調用居住在我的IdentityServer項目中的另一個API控制器。它基本上向全世界公開身份管理方法,但是將任何請求「傳遞」給IdentityServer Api。

直到我打電話給IdentityServer Api控制器時,一切正常。無論是否存在「授權」屬性,我的斷點都不會被擊中。我最終從IdentityServer Api控制器收到「401:Unauthorized」。

我試過重複使用原始請求的Auth頭,但沒有奏效。我還嘗試從我的索賠原則中找到「access_token」聲明,但沒有找到。

這裏是一個代碼片段:

  var httpClient = new HttpClient(); 

      // this didn't work - tried reusing the auth from the original request 
      //httpClient.DefaultRequestHeaders.Authorization = request.Headers.Authorization; 

      // this didn't work either - "access_token" is not found 
      //httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", Caller.FindFirst("access_token").Value); 
      var routePrefix = GetRoutePrefix(); 

      var response = await httpClient.PostAsync(
         $"{routePrefix}/post", 
         new ObjectContent(typeof(TDObj), entity, new JsonMediaTypeFormatter())); 

      return response; 

我是新來IdentityServer3和OAuth和不知道下一步該怎麼做。我試圖爲「身份」創建一個新的範圍,並試圖使其成爲我的客戶端應用程序中的必需範圍,但這似乎並沒有成功。我知道我在這裏錯過了一些重要的理解,但IdentityServer有很多文檔,我不知道從哪裏開始,也找不到特定於此需求的任何內容。我在雜草叢中!任何人都可以幫助我理解這裏發生了什麼?謝謝!

+0

我最終試圖獲得一個accesstoken並在我的HttpClient上調用SetBearerToken()。我成功地收到了令牌,但我仍然在我的Identity Api控制器遇到斷點之前收到401。我正在檢查我的日誌,但最後一個日誌條目以它成功驗證了我的令牌請求並以令牌響應而告終,在日誌中找不到關於401錯誤的任何內容。我發現這個類似的帖子,但沒有得到它:http://stackoverflow.com/questions/33480517/401-unauthorized-when-calling-web-api-using-identityserver3?rq=1 –

回答

0

我得到它的工作按照這裏斯科特·布雷迪的回答是:Identity Server and web api for user management

然而,他的回答並沒有立即爲我工作。我必須確保在發生api路由映射之前調用UseIdentityServerTokenValidation。這就是說,我的原始嘗試從我的前端應用程序的入站HTTPRequest中插入授權頭文件工作,所以我能夠刪除任何代碼請求訪問令牌,並且不必SetBearerToken( )在我的HttpClient上。只是這個:

httpClient.DefaultRequestHeaders.Authorization = request.Headers.Authorization; 
相關問題