KerberosでAD/LDAPコネクターの認証を構成する

AD/LDAPコネクターを介してActive Directoryとフェデレーションを行うことができます。AD/LDAPコネクターを使用すると、ユーザーは企業ネットワーク内のドメイン参加マシンで認証を行うことができます。

Active Directoryを設定

  1. [Auth0 Dashboard]>[Authentication(認証)]>[Enterprise(エンタープライズ)]>[Active Directory(AD)/LDAP]に移動して、構成したい接続を選択します。

  2. [Use Windows Integrated Auth (Kerberos)(Windows統合認証(Kerberos)を使用する)]スイッチを有効にします。

Kerberosの自動検出範囲

Kerberos認証が有効な場合、ADコネクターが稼働しているサーバーのIPアドレスは、ネットワークIPアドレス範囲に明示的に追加されます。つまり、ユーザーの要求がADコネクターのものと同じIPアドレスから送られてきた場合は、Kerberos認証が試行されます。

  1. IP範囲を構成します。CIDR表記を使用します。範囲はAuth0で表示される範囲で指定します。Auth0がクラウドで稼働している場合は、ユーザーの内部IPアドレスを表示することはできません。その場合は、会社のパブリック向け/WAN IPアドレスを構成することになります。

  2. この設定が変更されるたびに、ADコネクターをホストするWindows Serviceを再起動することを推奨します。再起動することで、変更がただちに有効になります。

認証フロー

ユーザーの場所に応じて、認証フローはIP範囲が設定されるときと異なります。Fabrikamを例として見てみましょう。これは、SaaSバージョンのAuth0を使用するため、接続にパブリックIPアドレス(24.12.34.56/32)を構成しました。建物内から接続しているすべてのユーザーの発信元は、(接続で構成されているように)24.12.34.56です。認証する場合、ユーザーはAD/LDAPのネイティブフローに従い、シームレスなSSOエクスペリエンスを実現することができます。

これが機能するには、ネットワークでユーザーがconfig.jsonコネクターの高可用性デプロイメントでは、ユーザーの接続先アドレスはすべてのコネクターインスタンスの前にあるネットワークロードバランサーです。

KerberosでAD/LDAPコネクターの認証を構成する フロー図

詳細については、「高可用性環境のAD/LDAPコネクターをデプロイする

一方、ユーザーが企業ネットワークを使用していない(顧客先にいる、VPNを使わないリモートワークなど)場合は、AD/LDAPコネクターに直接アクセスすることはできません。ユーザーはユーザー名/パスワードを入力する必要があり、Auth0はAD/LDAPコネクターを使ってこれらの資格情報を検証します(今度は、Active Directoryを使用してこれらの資格情報を検証します)。

Kerberos資格認証でAD/LDAPコネクターの認証を構成する フロー図

Lockによる自動ログイン

アプリケーションがAuth0でホストされるログインページ内でLock 10または11を使用している(通常、SAML/WS-Fedプロトコルとシングルサインオン(SSO)統合に使用される)場合、「Windows認証」を使用してユーザーが認証することができるボタンが表示されます。

(エンドユーザーのIPアドレスに基づいて)Kerberosを使用できる場合は、ユーザーの自動サインインが必要になることもあります。Kerberosを使用できる場合にユーザーを自動的にサインインするために、以下の変更をAuth0のログインページに追加することができます。

<script src="https://cdn.auth0.com/js/lock/11.x.x/lock.min.js"></script>
<script src="https://cdn.auth0.com/js/auth0/9.x/auth0.min.js"></script>
<script src="https://cdn.auth0.com/js/polyfills/1.0/object-assign.min.js"></script>

<script>
  var config = JSON.parse(decodeURIComponent(escape(window.atob('@@config@@'))));

  var lock = new Auth0Lock(config.clientID, config.auth0Domain, {
      //...additional configuration
  });

  function handleError(err) {
    // add proper error handling
    console.log(err);
  };

  var params = Object.assign({
      scope: config.internalOptions.scope,
      _csrf: config.internalOptions._csrf,
      state: config.internalOptions.state,
    },
    {
      /* additional configuration needed for use of custom domains 
      overrides: {
        __tenant: config.auth0Tenant,
        __token_issuer: '{yourCustomDomain}'
      }, */
      domain: config.auth0Domain,
      clientID: config.clientID,
      redirectUri: config.callbackURL,
      responseType: 'code'
    });

  var webAuth = new auth0.WebAuth(params);

  /*
   * Verify if Kerberos is possible, if it is, try to authenticate the user.
   *
   * the response from getSSOData will only have a connection and strategy if 
   * the IP address is within the Kerberos range in the connection's settings
   */
  webAuth.client.getSSOData(true, function(err, data) {
    if (err) handleError(err);

    if (data.connection && data.strategy === 'ad') {
      webAuth.authorize({connection: data.connection}, function(err) {
        if (err) handleError(err);
      });
    } else {
      lock.show();
    }
  });
</script>

Was this helpful?

/

ランタイム時にKerberosをバイパスする

ユーザーが接続の設定で構成された範囲内のIPアドレスからログインしていても、rememberLastLogin: falselock.show()に渡すことで、Kerberosを使用しないようにすることができます。

function useKerberos() {
      // return true to use Kerberos, false to bypass
    };
    
    lock.show({rememberLastLogin: useKerberos()});

Was this helpful?

/

Kerberos要求ログを有効にする

  1. Kerberos要求の冗長ロギングを有効にするには、システムレベルの環境変数DEBUG=kerberos-serverを追加します。

  2. コネクターを再起動します。

  3. 再度ログインし、詳細をログで確認します。

Kerberosに対するFirefoxのサポート

デフォルトで、FirefoxはユーザーをKerberosで認証するのに必要なすべての「ネゴシエーション」要求を拒否します。KerberosでFirefoxを使用したい場合は、コネクターがインストールされているサーバーで許可リストを使用する必要があります。

  1. [Firefox]タブを開き、アドレスバーにabout:configと入力します。

  2. 警告メッセージを消し、検索ボックスにnegotiateと入力します。

  3. network.negotiate-auth.trusted-uris項目を検索し、ダブルクリックして値を変更します。

  4. コネクターがインストールされているサーバーのドメイン名を入力します。ロードバランサーの背後に複数のコネクターのインスタンスがある場合は、バランサーのDNS名を追加します。値はURLの接頭辞またはドメインのカンマ区切りのリストを、mydomain.com, https://myotherdomain.comの形式で受け入れます。

  5. [OK]をクリックします。変更を有効にするのに、サーバーを再起動する必要はありません。

Kerberosに対するHTTPSのサポート

Kerberos認証はHTTP(HTTPSでなく)で行うことができます。Microsoft Office 365やその他の最新製品は、HTTPに対応していないことがあります。

この制限を解決するには、次のようにします。

  1. リバースプロキシを設定し、HTTPSドメインにAD/LDAPコネクターを公開します。SERVER_URL(フロントエンドのURL)パラメーターを使用し、AD/LDAPコネクターが受信要求をリッスンする公共の場所を公開することができます。

  2. リバースプロキシのSERVER_URLをデプロイされたコネクターのすべての内部インスタンスにマッピングします。