ドメイン間のシームレスなユーザー移行

2019年の初めに、ブランド名を変更し、名前をRealtimeBoardからMiroに変更しました。その結果、サイトのドメインがrealtimeboard.comからmiro.comに変更されました。



ドメインを変更すると、ユーザーは新しいドメインで承認する必要があり、ローカルアプリケーションの設定が失われ、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つの方法でサービスにアクセスできます。



ユーザーが古いドメインに移動した場合:



  1. realtimeboard.comの任意のページを開いた後、ユーザーのトークン、作成日、および追加のサービス情報の暗号化が実行されます。
  2. miro.com/migration/?data={hash} hash Get . , . .
  3. miro.com , , , , .
  4. migrationToken, .
  5. 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を使用して古いドメインを介して認証するユーザーをサポートすることができました。



All Articles