0

我實現使用上Thinktecture IdentityServer的頂部wsfederation插件wsfed認證,我有我自己的UserService與AuthenticateLocalAsync方法來實現如下可以IdentityServer返回的權利要求身份驗證請求

public async Task<AuthenticateResult> AuthenticateLocalAsync(string username, string password, SignInMessage message) 
     { 
      var requestViewModel = new SignInRequestViewModel 
           { 
            EmailAddress = username, 
            Password = password 
           }; 

      var result = await signInApplicationService.SignInAsync(requestViewModel); 

      var responseViewModel = result.ViewModel; 

      var claims = claimBuilder.GetClaims(responseViewModel); 

      return new AuthenticateResult(
       responseViewModel.CustomerId.ToString(), 
       string.Format("{0} {1}", responseViewModel.FirstName, responseViewModel.LastName), 
       claims); 
     } 

這種方法的一部分被調用時,登錄事件被觸發,正如你所看到的那樣,我對照我自己的數據庫存儲庫對用戶進行了身份驗證,然後從結果中我建立了在AuthenticateResult對象中引用的聲明對象並返回。

因此,我認爲,這些索賠現在應可在客戶端上,所以沒必要做進一步的要求,但它實際上使自己第二次請求該GetProfileDataAsync方法被調用,並根據文件:

每當要求提供有關用戶權利這種方法被稱爲 (如在令牌創建或通過用戶信息端點

這還挺決策意識,但它意味着,我需要再次打電話給我的數據庫檢索客戶數據再次重建聲稱與我在AuthenticateLocalAsync方法中所做的相同?

如果是這樣,那麼在第一個驗證方法中通過聲明有什麼意義?

有人可以解釋一下嗎?

感謝

回答

0

到GetProfileDataAsync調用有ClaimsPrincipal。您在認證階段放置的聲明應該在該委託人身上。所以不需要數據庫往返。

如果在那裏找不到索賠,這將是一個錯誤,你應該在問題跟蹤器上打開一個問題。