我的问题是关于在自定义ProfileService中读取Acr_Values。
因此,目前我在向用户添加TenantID声明时遇到麻烦。 我正在将IdentityServer4与ASP.net core 2.2和实体框架一起使用。
客户端的启动是这样配置的。 客户:
options.Events.OnRedirectToIdentityProvider = context =>
{
// Set tenant host
context.ProtocolMessage.AcrValues = $"tenant:{context.HttpContext.Request.Host.Host}";
return Task.FromResult(0);
};
IdentityServer4 ProfileService:
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
... code ommitted
var user = await _userManager.FindByIdAsync(sub);
if (user == null)
{
//Skip
}
else
{
var validatedRequestDictionary = context.ValidatedRequest.Raw.AllKeys.ToDictionary(s => s, s => context.ValidatedRequest.Raw[s]);
... code ommitted
}
}
以某种方式,Acr_Values在登录期间可用,但在请求GetProfileDataAsync()之后不可用。
我在网站上阅读了此context.ValidatedRequest.Raw应该包含acr_values。只是没有,而且我一生也无法弄清楚为什么这里缺少这种方法,但是可以在上下文中登录时使用。
我已经搜索了关于SO的答案,但实际上没有任何东西可以帮助我。想知道是否有人在做什么我在这里做错了。