2017-06-08 3 views
2

内部ユーザー(従業員)と外部ユーザー(顧客)の両方が使用するポータル(mvc rdp)があります。企業ネットワーク内から認証要求が行われたかどうかをIdentityServer3が自動的に検出し、ADFSにリダイレクトするようにします。ユーザーエージェントがインターネットから呼び出している場合は、ローカルログインが表示されます。IdentityServer3 - クライアントがイントラネット上にある場合、ADFSにリダイレクト

ドメインバインドされたユーザーに対してシングルサインオンを提供するクライアントが内部ネットワーク上にある場合、IdSrvが自動的にADFSにリダイレクトされるように、外部idpにボタンを付けることは望ましくありません。

内部ユーザーのみがポータルを使用した場合、特定のIDプロバイダのみを使用するようにクライアントを設定しますが、このポータルは外部顧客によっても使用され、そのユーザーはADに保存されません)

PreAuthenticateAsyncをオーバーライドし、Dns.Dns.GetHostName()を使用してみましたが、これはIdentityServerが実行されているマシンであり、クライアントマシンでは実行されていないマシンに関連しています。

mvcコントローラでは、単にRequest.UserHostNameを使用しますが、これはIdentityServer3 UserServiceでは使用できません。

答えて

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); 
    } 
} 
関連する問題