在我目前的 asp.net MVC核心应用程序中,我们使用OpenId Connect向我们公司的身份提供商进行身份验证。 但是,在本地开发期间,我们无法联系到提供商。 此外,我们还希望轻松更改声明值以进行开发和单元测试。
我尝试将IHttpContextAccessor的服务绑定交换为DevelopmentHttpContextAccessor,该访问器用所需的声明填充HttpContext的标识。 这是一种迂回的方式,它也没有工作,因为我在我的服务中检查索赔时,索赔会被清空。
在开发和单元测试期间处理此问题的标准方法是什么?我错过了什么?
答案不是伪造 IHttpContextAccessor,而是为标识属性设置自定义 ClaimPrincipal。 在Startup.Configure
中,您可以添加中间件步骤:
app.Use((httpContext, nextMiddleware) => {
var claims = new[] {
// Your claims here
};
var claimsIdentity = new ClaimsIdentity(claims);
var user = new ClaimsPrincipal(claimsIdentity);
httpContext.User = user;
return nextMiddleware();
});