ドメインを変更すると、ユーザーは新しいドメインで承認する必要があり、ローカルアプリケーションの設定が失われ、SSOユーザーは自分で追加設定を行わないとログインできません-これはすべてユーザーフレンドリーではなく、パスワード回復の頻度が増加し、一部のユーザーはまったくできませんでしたすぐにアプリケーションを使用します。
ドメインの変更後のトラフィックの損失を最小限に抑えるには、許可されたユーザーを古いドメインから新しいドメインに移行する必要がありました。
- 古いドメインを通じてSSOプロバイダーを使用して認証したユーザーをサポートします。
- ユーザーの認証トークンを古いドメインから新しいドメインに転送します。
- カスタムアプリケーション設定でLocalStorageを渡します。
データ転送と暗号化
サイトはトークンを保存して再利用できるストレージを使用していないため、get-parametersを使用してトークンを転送することにしました。get-parameterを介してトークンをオープンで渡すことは安全ではないため、傍受から保護する必要があります。OpenSSLとMcryptの2つの暗号化方式がありました。Mcryptは長い間更新されておらず、OpenSSLに比べて低速でデータを暗号化し、サーバーに余分な負荷をかける必要がありません。したがって、OpenSSLを使用してトークンを暗号化しました。
ただし、結果のハッシュは引き続き傍受され、再度使用される可能性があります。トークンが再利用されないようにするために、「暗号化日付」パラメーターを追加しました。これにより、ハッシュは10秒間有効でした。この時間は、すべての操作を実行するのに十分なマージンがありました。また、12時間ごとに交換用の暗号化キーを追加しました。キーはVaultに保存され、サイト間で同期されました。
結果のハッシュはgetパラメータとして渡され、URLを介した安全な送信のためにurl_encodeを使用してさらに処理されました。文字がエスケープされたり、アドレスの構造が損なわれる可能性があるためです。
ハッシュ構造:
url_encode(OpenSSL({
'token': '',
'date': ' ',
'additional_values': ['param', 'param']
}))
LocalStorageはJavaScript経由でのみアクセスできます。この問題を解決するために、クロスドメイン要求を安全に送信できるpostMessageおよびiframeインターフェースが選択されました。LocalStorageのデータは、JSON.stringify()を使用して文字列に変換され、miro.comドメインに転送されました。そこで、データは元に戻され、miro.comドメインのLocalStorageに書き込まれました。
すべてのステップの説明を含む作業スキーム
図は見やすい形式になっています。
ユーザーは、古いrealtimeboard.comドメイン(たとえば、ブックマークから)または新しいmiro.com(たとえば、広告)の2つの方法でサービスにアクセスできます。
ユーザーが古いドメインに移動した場合:
- realtimeboard.comの任意のページを開いた後、ユーザーのトークン、作成日、および追加のサービス情報の暗号化が実行されます。
- miro.com/migration/?data={hash} hash Get . , . .
- miro.com , , , , .
- migrationToken, .
- LocalStorage migrationLocalstorage. , JS-, iFrame relatimeboard.com/localstorage/ postmessage , .
ユーザーが新しいmiro.comドメインに直接アクセスした場合、ユーザーがトークンとLocalStorageの移行に合格したことを確認するチェックが実行されました。ユーザーがすでに移行を完了している場合、彼はmiro.comドメインにとどまっています。完了しなかった場合は、realtimeboard.comにトークンを取得するためのリダイレクトがありました(このために、cookieにmigrationTokenとmigrationLocalstorageの2つのフラグを保存しました)。
このスキームは、古いドメインrealtimeboard.comにログインしたSSOユーザーにとっても効果的でした。トークンを新しいドメインに移行せずに機能するルートのリストが追加されました。通常どおり実行され、作業状態に応じて/ app /または/ login /にリダイレクトされるSSOのルートが含まれ、その後トークン移行メカニズムが再度接続されました。
出力
私は1か月を研究と準備に費やし、もう1か月を慣らしに費やしました(同時に他のプロジェクトに従事していました)。このソリューションにより、認証済みユーザーを古いドメインから新しいドメインに移行し、SSOを使用して古いドメインを介して認証するユーザーをサポートすることができました。