2017-06-09 43 views
1

需要幫助來認證從任何客戶端應用程序到WEB API的令牌請求。我們已經在Azure AAD中註冊了我們的Web API,其中包含多租戶應用程序。我在不同租戶中註冊的客戶端應用程序能夠從AAD獲取Access令牌。在通過請求頭的訪問令牌部分向我們的端點發送Http請求時,我們收到401未授權的異常。我發現瀏覽多租戶場景的原因是禁用ValidateIssuer並擁有自定義處理程序。401未授權多租戶Web API的異常

•是否有任何自定義處理程序正在實現WindowsAzureActiveDirectoryBearerAuthentication。我看到有人在使用OpenIDConnect。但對於WEB API,我們正在使用WindowsAzureActiveDirectoryBearerAuthentication,即在UseWindowsAzureActiveDirectoryBearerAuthentication中是否存在任何用於驗證訪問令牌的等效事件並告知用戶已通過身份驗證?

•是否有更好的驗證訪問令牌的標準並告訴用戶是有效的用戶?

•我們可以通過將持票人標記傳遞給WEBAPI授權過濾器來獲得用戶的聲明嗎?或者將httprequest對象聲明獲取用戶信息,如給定名稱,租戶名稱,對象ID(特別是localhost調試場景)。如果我們可以獲取這些信息,我們可以擁有自己的驗證邏輯。

請讓我們知道這種方法是否是驗證用戶的最佳實踐。

回答

0

您可以實現自定義發行者驗證器並將其分配給IssuerValidator屬性。

TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters 
{ 
     IssuerValidator = (issuer, token, tvp) => 
     { 

      if (db.Issuers.FirstOrDefault(b => (b.Issuer == issuer)) == null) 
       return issuer; 
      else 
       throw new SecurityTokenInvalidIssuerException("Invalid issuer"); 
     } 
} 

你可以解碼的訪問令牌來獲得基本的用戶:當您不能指定配置​​發行人的預定義列表,需要一些運行時的邏輯來確定是否信任令牌呈現的發行人,這是有用像family_name/given_name這樣的信息,但只能通過使用用戶身份來獲取訪問令牌。