IdentityServer3重写了未调用的PostAuthenticateAsync方法

时间:2018-03-07 17:33:10

标签: identityserver3

我们设置了一个实现UserServiceBase的自定义用户服务,覆盖了一些方法(PreAuthenticateAsync,PostAuthenticateAsync等)。验证时会调用我们的PreAuthenticateAsync方法,但PostAuthenticateAsync方法永远不会被命中。

用户流程应使具有过期密码的人员重定向到重置页面。在用户身份建立后,PostAuthenticate似乎是处理此问题的最佳位置(我们可以在此处查看过期字段的自定义声明)。

该方法被覆盖[公共覆盖任务PostAuthenticateAsync(PostAuthenticationContext context)],但我无法弄清楚为什么它在登录后没有被击中。有没有人经历过这个或者可以想到任何原因为什么会发生这种情况?或者任何想法我应该研究一个更好的方法?谢谢!

以下是相关的代码部分:

public class MyAccountUserService : UserServiceBase
{
    public override Task PreAuthenticateAsync(PreAuthenticationContext context)
    {
        var id = _owinContext.Request.Query.Get("signin");
        context.AuthenticateResult = new AuthenticateResult("~/custom/login?id=" + id, (IEnumerable<Claim>)null);
        return Task.FromResult(0);
    }

    public override Task PostAuthenticateAsync(PostAuthenticationContext context)
    {
        if (context.AuthenticateResult.User.Identity.GetIsExpiredPassword())
        {
            context.AuthenticateResult = new AuthenticateResult("/account/reset", (IEnumerable<Claim>)null);
            return Task.FromResult(0);
        }
        else
        {
            return base.PostAuthenticateAsync(context);
        }            
    }
}

0 个答案:

没有答案