ASP核心拦截所有身份验证请求

时间:2017-03-20 15:48:54

标签: c# authentication asp.net-core identityserver4

修改 我正在寻找拦截身份验证请求的通用方法,应该有一种方法来全局配置,使用与我正在使用的框架无关的中间件或事件等(IdentityServer4)

我正在使用IdentityServer4来验证我的WebApi。我正在寻找在身份验证之后和之前拦截身份验证请求的事件。

我的启动类以这种方式配置来处理身份验证。

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
    Authority = "http://localhost:5000",
    RequireHttpsMetadata = false,

    ApiName = "api1"
});

我正在寻找一个事后认证的事件,这样我就可以创建一个从IdentityServer4用户到本地用户的链接,这样我就可以在那里引用外键。

是否有事件或简单方法插入Post_Authentication_Requests和一般的身份验证请求,我还想对失败的登录尝试进行一些额外的记录?

1 个答案:

答案 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)