我们正在使用IdentityServer3,当用户登录时,我们需要检查他们是否已接受服务条款和条件,并且这需要成为Auth的一部分,请问该实现方法是什么?
在完成登录之前,是否可以重定向到条款页面?
答案 0 :(得分:1)
是的,有可能。
他们确实记录了其中的一些内容(更像是关于如何执行操作的提示)。来自IdentityServer3 UserService docs:
部分登录:除了完全登录外,身份验证API还可 执行“部分登录”。部分登录允许用户服务执行以下操作: 中断用户的登录工作流程并将其重定向到自定义页面 他们必须执行一些操作才能继续登录 (例如,执行2fa,填写注册表或接受 EULA)。
基本上,您将需要有一个自定义UserService,它将覆盖AuthenticateLocalAsync
或AuthenticateExternalAsync
(或同时覆盖这两者)。在这种方法中,您可以检查并确保它们已接受条款(例如,通过检查数据库),如果没有,则将其重定向到页面以通过身份验证上下文的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"
,您可以在“条款和条件”页面中添加一个复选框)。