2016-06-14 22 views
0

我有兩個問題:訪問SignInMessage與緩存在identityserver3 UserService.GetProfileDataAsync

1. 我們已經實施的IdSrv3是多租戶,至少在一定程度上。實質上,我們有很多環境,目前我們需要一個IdSrv3來爲他們提供服務。我正在使用SignInMessage.Tenant來區分它們,並且在我的自定義用戶服務的AuthenticateLocalAsync方法中正常工作。但是我無法在GetProfileDataAsync方法中執行此操作。我注射OwinEnvironmentService到我的用戶服務的構造和使用,以獲得SignInMessage並從訪問租戶,但是這始終是空的,即

UserService:

private readonly OwinEnvironmentService _env; 

public UserService(OwinEnvironmentService env) 
{ 
    _env = env; 
} 

public Task GetProfileDataAsync(ProfileDataRequestContext context) 
    { 
     var signInMessage = _env.Environment.GetSignInMessage(); 
     ... 
    } 

有沒有什麼辦法讓在SignInMessage租客?

2. 聲明緩存又如何工作?在我的啓動,我創造我的userservice並設置緩存持續時間,即:

factory.UserService = new Registration<IUserService, UserService>(); 
factory.ConfigureUserServiceCache(TimeSpan.FromHours(12)); 

但我怎麼加我用戶聲明?我是否需要做任何事情來向AuthenticateLocalAsyn中的緩存添加聲明?如何訪問GetProfileDataAsync中的緩存索賠?

回答

0

1)在GetProfileDataAsync中,主題要求應足以唯一標識用戶,從而推斷出用戶所屬的承租人。

2)緩存作爲裝飾器模式完成,裝飾器進行緩存。緩存由主題和請求的作用域/聲明組合而成。

+0

謝謝,我已經使主題環境獨特,它工作正常。另外我可以在日誌中看到用戶信息上的緩存 – Manjhari