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

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

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

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

    ApiName = "api1"
});

我正在寻找一个用于身份验证后的事件,以便我可以创建从 IdentityServer4 用户到本地用户的链接,以便我可以在那里引用外键。

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

最佳答案

是的,大多数身份验证中间件都有一种方法可以连接到它们各自的身份验证事件中。这些可以在 here 中找到。为了回答您的问题,有一些 PRE 和 POST 身份验证事件 Hook ,您需要选择一个满足您需求的 Hook 。例子:

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 的示例存储库中看到一个示例,其中演示了如何劫持失败的身份验证请求以返回 500(而不是正常的 401)

关于c# - ASP Core 拦截所有认证请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42908083/

10-12 23:37