ASP 核心拦截所有身份验证请求
ASP Core Intercept All Authentication Requests
编辑
我正在寻找一种拦截身份验证请求的通用方法,应该有一种方法可以全局配置它,使用中间件或事件等,与我正在使用的框架无关(IdentityServer4)
我正在使用 IdentityServer4 来验证我的 WebApi。我正在寻找拦截身份验证请求 post 和身份验证之前的事件。
我的启动 class 以这种方式配置来处理身份验证。
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
ApiName = "api1"
});
我正在寻找 post 身份验证的事件,这样我就可以创建一个从 IdentityServer4 用户到本地用户的 link,这样我就可以在那里引用外键。
是否有插入 Post_Authentication_Requests 的事件或简单方法,以及一般的身份验证请求,我也想对失败的登录尝试做一些额外的记录?
是的,大多数身份验证中间件都有一种方法可以连接到各自的身份验证事件。这些可以找到 here。为了回答您的问题,有一些 PRE 和 POST 身份验证事件挂钩,您需要选择一个满足您需要的。示例:
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 的示例存储库中看到一个示例,其中演示了如何将失败的身份验证请求劫持到 return a 500(而不是正常的401)
编辑 我正在寻找一种拦截身份验证请求的通用方法,应该有一种方法可以全局配置它,使用中间件或事件等,与我正在使用的框架无关(IdentityServer4)
我正在使用 IdentityServer4 来验证我的 WebApi。我正在寻找拦截身份验证请求 post 和身份验证之前的事件。
我的启动 class 以这种方式配置来处理身份验证。
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
ApiName = "api1"
});
我正在寻找 post 身份验证的事件,这样我就可以创建一个从 IdentityServer4 用户到本地用户的 link,这样我就可以在那里引用外键。
是否有插入 Post_Authentication_Requests 的事件或简单方法,以及一般的身份验证请求,我也想对失败的登录尝试做一些额外的记录?
是的,大多数身份验证中间件都有一种方法可以连接到各自的身份验证事件。这些可以找到 here。为了回答您的问题,有一些 PRE 和 POST 身份验证事件挂钩,您需要选择一个满足您需要的。示例:
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 的示例存储库中看到一个示例,其中演示了如何将失败的身份验证请求劫持到 return a 500(而不是正常的401)