IdentityServer3 - 如果客户端在 Intranet 上,则重定向到 ADFS

IdentityServer3 - redirect to ADFS if client is on intranet

我们有一个供内部用户(员工)和外部用户(客户)使用的门户 (mvc rdp)。我们希望 IdentityServer3 自动检测身份验证请求是否是从公司网络内部完成的,并重定向到 ADFS。如果用户代理从 Internet 调用,则应显示本地登录。

简而言之,我们不希望有外部 idp 按钮,因为我们希望 IdSrv 在客户端位于内部网络上时自动重定向到 ADFS,以便为我们的域绑定用户提供真正的单点登录。

如果该门户仅供内部用户使用,那么我们只需将客户端配置为仅使用特定的身份提供者,但该门户也供外部客户使用,并且这些用户未存储在我们的 AD 中;)

我看过重写 PreAuthenticateAsync 并使用 Dns.Dns.GetHostName() 但这与 IdentityServer 运行 所在的机器有关,而不是客户端机器。

在 mvc 控制器中,我们将只使用 Request.UserHostName,但这在 IdentityServer3 UserService 中不可用。

我想你可以从OwinContext中得到客户端的IP地址;像这样:

public class UserService : UserServiceBase
{
    OwinContext ctx;
    public UserService(OwinEnvironmentService owinEnv)
    {
        ctx = new OwinContext(owinEnv.Environment);
    }

    public override Task PreAuthenticateAsync(PreAuthenticationContext context)
    {
        // The IP Address of the remote client
        var ipAddress = ctx.Environment["server.RemoteIpAddress"].ToString();

        if (BelongsToOurNetwork(ipAddress))
            context.SignInMessage.IdP = "OurADFS";
        else
            context.SignInMessage.IdP = "idsrv"; // local login

        return Task.FromResult(0);
    }
}