Identity Server(3)->添加条款和条件阶段

时间:2019-03-29 09:53:44

标签: identityserver3

我们正在使用IdentityServer3,当用户登录时,我们需要检查他们是否已接受服务条款和条件,并且这需要成为Auth的一部分,请问该实现方法是什么?

在完成登录之前,是否可以重定向到条款页面?

1 个答案:

答案 0 :(得分:1)

是的,有可能。

他们确实记录了其中的一些内容(更像是关于如何执行操作的提示)。来自IdentityServer3 UserService docs

  

部分登录:除了完全登录外,身份验证API还可   执行“部分登录”。部分登录允许用户服务执行以下操作:   中断用户的登录工作流程并将其重定向到自定义页面   他们必须执行一些操作才能继续登录   (例如,执行2fa,填写注册表或接受   EULA)。

基本上,您将需要有一个自定义UserService,它将覆盖AuthenticateLocalAsyncAuthenticateExternalAsync(或同时覆盖这两者)。在这种方法中,您可以检查并确保它们已接受条款(例如,通过检查数据库),如果没有,则将其重定向到页面以通过身份验证上下文的AuthenticateResult获得他们的同意。

github上的IdentityServer3.Samples CustomUserService有一个示例实现。这是带有相关位的代码段:

    public override Task AuthenticateLocalAsync(LocalAuthenticationContext context)
    {
        var user = Users.SingleOrDefault(x => x.Username == context.UserName && x.Password == context.Password);
        if (user != null)
        {
            if (user.AcceptedEula)
            {
                context.AuthenticateResult = new AuthenticateResult(user.Subject, user.Username);
            }
            else
            {
                context.AuthenticateResult = new AuthenticateResult("~/eula", user.Subject, user.Username);
            }
        }

        return Task.FromResult(0);
    }

第二个AuthenticateResult是表示需要做的其他事情,因为其中包括重定向链接("~/eula",您可以在“条款和条件”页面中添加一个复选框)。