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

时间:2017-06-08 08:01:29

标签: asp.net-mvc adfs identityserver3

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

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

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

我已经看过覆盖PreAuthenticateAsync并使用Dns.Dns.GetHostName(),但这与运行IdentityServer的计算机有关,而与客户端计算机无关。

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

1 个答案:

答案 0 :(得分:2)

我认为您可以从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);
    }
}