修改 我正在寻找拦截身份验证请求的通用方法,应该有一种方法来全局配置,使用与我正在使用的框架无关的中间件或事件等(IdentityServer4)
我正在使用IdentityServer4来验证我的WebApi。我正在寻找在身份验证之后和之前拦截身份验证请求的事件。
我的启动类以这种方式配置来处理身份验证。
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
ApiName = "api1"
});
我正在寻找一个事后认证的事件,这样我就可以创建一个从IdentityServer4用户到本地用户的链接,这样我就可以在那里引用外键。
是否有事件或简单方法插入Post_Authentication_Requests和一般的身份验证请求,我还想对失败的登录尝试进行一些额外的记录?
答案 0 :(得分:2)
是的,大多数身份验证中间件都可以挂钩到各自的身份验证事件中。这些可以找到here。要回答你的想法,有一些PRE和POST auth事件挂钩,你需要选择一个满足你的需求。例如:
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
ApiName = "api1",
Events = new OpenIdConnectEvents()
{
OnMessageReceived = async context =>
{
//example of a "before" event hook
}
OnTokenValidated = async context =>
{
//example of an "after" event hook
var claimsIdentity = context.Ticket.Principal.Identity as ClaimsIdentity;
if (claimsIdentity != null)
{
// Get the user's ID
string userId = claimsIdentity.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value;
}
}
}
});
您还可以在aspnet / Security here的示例repo中看到一个示例,其中演示了如何劫持失败的身份验证请求以返回500(而不是正常的401)