Kerberos SSOを使用してホストにcreate-react-app / WebpackDevServerプロキシを使用できますか?

ジョン・フリードマン

Kerberosシングルサインオンを実装し、HTTPS / WSSを介してRESTとSTOMPの両方のWebSocketを公開するSpring-Bootアプリケーションがあります。ローカル開発用のプロキシを使用してこれを設定する必要があります。

私は以下の両方をに追加しようとしました package.json

"proxy": {
  "/ws": {
    "target": "wss://my.host.name.com:8080",
    "ws": true,
    "ssl": true
  },
  "/api": {
    "target": "https://my.host.name.com:8080",
    "ssl": true
  }
}

"proxy": "https://my.host.name.com:8080"

次に、クライアントコードを変更します。

===================================================================
--- app/src/api/index.ts    (revision 6fcacd98ec61cda85d7dfa7fe5d5f5c12aafbe8a)
+++ app/src/api/index.ts    (date 1540455521933)
@@ -5,7 +5,7 @@
 import Statistics from '../types/Statistics';

 export function submitPricerList(list: ReadonlyArray<PricerCoreInputs | null>): Promise<string> {
-    return fetch('https://my.host.name.com:8080/api/pricer-list', {
+    return fetch('/api/pricer-list', {
         body: JSON.stringify(list),
         credentials: 'include',
         headers: {
@@ -28,7 +28,7 @@
 }

 export function initialSnapshot(): Promise<SnapshotWithChartableCurves | null> {
-    return fetch('https://my.host.name.com:8080/api/initial-snapshot', {
+    return fetch('/api/initial-snapshot', {
         credentials: 'include',
         headers: {
             'Accept': 'application/json'

===================================================================
--- app/src/containers/App.tsx  (revision 6fcacd98ec61cda85d7dfa7fe5d5f5c12aafbe8a)
+++ app/src/containers/App.tsx  (date 1540455521900)
@@ -74,7 +74,7 @@
         super(props);

         const stompClient = new StompJs.Client({
-            brokerURL: `wss://my.host.name.com:8080/ws/gs-guide-websocket`,
+            brokerURL: `wss://${window.location.host}/ws/gs-guide-websocket`,
             debug: (str) => {
                 this.logger.log({level: 'debug', message: str});
             },

単純なプロキシ設定ではHTTPSプロキシが機能し、WSSは機能しませんが、詳細なプロキシ設定ではどちらも機能しません。

開発中にHTTPSとWSSの両方が正しくルーティングされるようにプロキシ設定を構成するにはどうすればよいですか?

ジョン・フリードマン

を使用するsetupProxy.jsスクリプトを使用して、この問題を解決することになりましたhttp-proxy-middleware

私たちは、その後、行動などを制御するためのいくつかの環境変数を選んだREACT_APP_HOST_NAMEし、REACT_APP_FORCE_PROXY_PROTOCOL結果のコードでこのようなビット:

const proxy = require('http-proxy-middleware');

module.exports = function(app) {
    const developmentHostName = process.env.REACT_APP_HOST_NAME;
    if (process.env.NODE_ENV === 'development' &&  developmentHostName) {
        const protocol = process.env.REACT_APP_FORCE_PROXY_PROTOCOL || 'https';
        const hostName = `${developmentHostName.trim()}.my.domain.com:8080`;
        app.use(
            proxy('/api', {
                target: `${protocol}://${hostName}`,
                secure: false,
                onProxyRes(proxyRes) {
                    // protocolRewrite option is currently only applicable to 301/302/307/308 response codes
                    const locationHeader = proxyRes.headers['location'];
                    if (locationHeader !== undefined) {
                        const protocolEnd = locationHeader.indexOf('://');
                        const locationProtocol = locationHeader.substring(0, protocolEnd);
                        if (locationProtocol !== 'http') {
                            proxyRes.headers['location'] = 'http' + locationHeader.substring(protocolEnd);
                        }
                    }
                }
            })
        );
    }
};

そして、私たちのアプリケーションには、このようなものが少し含まれています

const hostname = window.location.hostname;
const developmentHostName = process.env.REACT_APP_HOST_NAME || hostname;
const hostAndPort = hostname === 'localhost' ? `${developmentHostName.trim()}.my.domain.com:8080` : `${hostname}:${window.location.port}`;
const protocol = process.env.REACT_APP_FORCE_PROXY_PROTOCOL || window.location.protocol;
const wsProtocol = protocol.length > 4 && protocol.substring(0, 5) === 'https' ? 'wss:' : 'ws:';

これは、WebSocket接続がプロキシされていないことを意味しますが、少なくとも機能します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

エクスプレスバックエンドを使用してcreate-react-appをherokuにデプロイすると、ブラウザーで無効なホストヘッダーが返されます

分類Dev

create-react-appでプロキシを構成できません

分類Dev

create-react-appを使用してAzureにデプロイする

分類Dev

create-react-appから/ graphqlにhtmlgetリクエストをプロキシすることは可能ですか?

分類Dev

create-react-appでSocket.io-clientを使用するWebSocketsプロキシ

分類Dev

create-react-app / expressプロキシエラー:リクエストをプロキシできませんでした(ECONNRESET)

分類Dev

create-react-appを使用してreactアプリにreact-router-domを追加すると、jestテストが失敗するのはなぜですか

分類Dev

create-react-native-appを使用して作成されたReactNativeアプリにReduxストアを追加する方法

分類Dev

create-react-appホスティングサーバーでプロキシを使用したAxios投稿が機能しない

分類Dev

create-react-appでプロジェクトを作成するときにYarnではなくNPMを使用する方法はありますか?

分類Dev

create-react-appで "./Nameからのエクスポート名を使用していますか?

分類Dev

Create-React-Native-Appプロジェクトを構成してMobXを使用し、Babelを使用してデコレーターを有効にします

分類Dev

非常に長いパスを回避し、Create React Appプロジェクト内で絶対パスを使用するにはどうすればよいですか?

分類Dev

システムにReactをインストールしてcreate-react-appをアンインストールできないのはなぜですか?

分類Dev

テスト用にcreate-react-appを使用してmaterial-uiを正しく構成する方法は?

分類Dev

create-react-appで「/」を使用してルートをブロックする方法

分類Dev

React VR を使用して画像をプリロードおよびキャッシュできますか?

分類Dev

create-react-appを使用してReactアプリケーションを作成した後にReduxをインストールするにはどうすればよいですか?

分類Dev

Create React Appを使用してReactに画像(SVGまたはPNG)をインポートする方法

分類Dev

ADFSはKerberosを使用しますか?

分類Dev

pyhiveとkerberosチケットを使用して、Kerberos化されたHadoopクラスターに接続します

分類Dev

create-react-appを使用してディレクトリへのGETリクエストを実行します

分類Dev

App.jsファイル内でReactコンテキストをどのように使用しますか?

分類Dev

create-react-appを使用してアプリを作成することはできません

分類Dev

npxcreate-react-appを使用してreactアプリを作成できません

分類Dev

制約付きのダブルホップと偽装を伴うSSOを使用するActiveDirectoryのKerberosは、サービスチケットの更新に失敗します

分類Dev

Kerberosを使用してYarnでDCE(Docker Container Executor)を実行できますか?

分類Dev

Jestとcreate-react-appを使用したReactAsyncのテスト

分類Dev

create-react-native-appを使用してアプリを作成しましたが、Google Playストアに公開するにはどうすればよいですか?

Related 関連記事

  1. 1

    エクスプレスバックエンドを使用してcreate-react-appをherokuにデプロイすると、ブラウザーで無効なホストヘッダーが返されます

  2. 2

    create-react-appでプロキシを構成できません

  3. 3

    create-react-appを使用してAzureにデプロイする

  4. 4

    create-react-appから/ graphqlにhtmlgetリクエストをプロキシすることは可能ですか?

  5. 5

    create-react-appでSocket.io-clientを使用するWebSocketsプロキシ

  6. 6

    create-react-app / expressプロキシエラー:リクエストをプロキシできませんでした(ECONNRESET)

  7. 7

    create-react-appを使用してreactアプリにreact-router-domを追加すると、jestテストが失敗するのはなぜですか

  8. 8

    create-react-native-appを使用して作成されたReactNativeアプリにReduxストアを追加する方法

  9. 9

    create-react-appホスティングサーバーでプロキシを使用したAxios投稿が機能しない

  10. 10

    create-react-appでプロジェクトを作成するときにYarnではなくNPMを使用する方法はありますか?

  11. 11

    create-react-appで "./Nameからのエクスポート名を使用していますか?

  12. 12

    Create-React-Native-Appプロジェクトを構成してMobXを使用し、Babelを使用してデコレーターを有効にします

  13. 13

    非常に長いパスを回避し、Create React Appプロジェクト内で絶対パスを使用するにはどうすればよいですか?

  14. 14

    システムにReactをインストールしてcreate-react-appをアンインストールできないのはなぜですか?

  15. 15

    テスト用にcreate-react-appを使用してmaterial-uiを正しく構成する方法は?

  16. 16

    create-react-appで「/」を使用してルートをブロックする方法

  17. 17

    React VR を使用して画像をプリロードおよびキャッシュできますか?

  18. 18

    create-react-appを使用してReactアプリケーションを作成した後にReduxをインストールするにはどうすればよいですか?

  19. 19

    Create React Appを使用してReactに画像(SVGまたはPNG)をインポートする方法

  20. 20

    ADFSはKerberosを使用しますか?

  21. 21

    pyhiveとkerberosチケットを使用して、Kerberos化されたHadoopクラスターに接続します

  22. 22

    create-react-appを使用してディレクトリへのGETリクエストを実行します

  23. 23

    App.jsファイル内でReactコンテキストをどのように使用しますか?

  24. 24

    create-react-appを使用してアプリを作成することはできません

  25. 25

    npxcreate-react-appを使用してreactアプリを作成できません

  26. 26

    制約付きのダブルホップと偽装を伴うSSOを使用するActiveDirectoryのKerberosは、サービスチケットの更新に失敗します

  27. 27

    Kerberosを使用してYarnでDCE(Docker Container Executor)を実行できますか?

  28. 28

    Jestとcreate-react-appを使用したReactAsyncのテスト

  29. 29

    create-react-native-appを使用してアプリを作成しましたが、Google Playストアに公開するにはどうすればよいですか?

ホットタグ

アーカイブ