2017-01-11 8 views
2

私は、クライアントにドキュメントを提供するASP.NET Webアプリケーションを持っています。この文書は、「別個の」システムに置くことができます。私がログインする必要のあるシステムから文書を取得するには、トークンを返します。トークンは、私がそれを作るすべての要求に対して使用します。 (そのシステムの資格情報は私のアプリケーションの現在のユーザーに依存しません、私はちょうどユーザー名とパスワードを固定しました)ASP.NETアプリケーションの別のシステムに認証トークンを格納する場所

私は文書が要求されるたびにログインしないようにしたいと思います。トークン(1時間後に期限切れになります)。

この種の変数を保存するにはどうすればよいでしょうか?

静的変数の使用は推奨されず、Sessionを使用すると、ユーザーにのみチケットが保存されます。

+0

ログインすると55〜59分ごとに実行され、トークンをデータベースに保存し、このシステムを使用するすべてのクラスでデータベースからそのトークンを読み取るようにする自動プロセスがありますか? –

+0

有効期限が1時間のクッキーはいかがですか?個人的に私は更新トークンを発行する必要がなければデータベースにトークンを格納しません。他のオプションには、HTML5 Webストレージ - セッション記憶域(現在のタブでのみ使用可能、タブが閉じられると値がクリアされます)とローカル記憶域(タブ/ブラウザを閉じても値が保持されます) – Developer

+0

@Developerしかし、それぞれの異なるユーザー(私が正しく理解している場合)と私はこれを避けたいです。 –

答えて

1

あなたが持っているアプリはアプリアプリ認証で、アプリアプリ認証ではないと思います。その場合、1時間の有効期限を持つキャッシュにトークンを保存するのはどうですか? システムがトークンを読み込もうとするたびに、まずキャッシュから値を取得してみてください。最初のログインまたは期限切れのキャッシュを意味する空の場合は、認証サービスにアクセスし、トークンを取得してキャッシュに保存します。

ロードバランスされた環境では、各サーバーのトークンが異なる可能性がありますが、あなたのケースでは問題ないと思います。そうでなければ、Redisキャッシュのようなものを考慮する必要があります。

0

Joshは上記のコメントで推奨しているように、データベースにトークンを格納する方がよいでしょう。

トークンを更新する方法を選択する必要があります。

サービスまたはジョブを実行して古いトークンが期限切れになる5分前に新しいトークンを要求できます。また、Webアプリケーションは新しいトークンを使用してドキュメントを取得します。

また、Webアプリケーションでトークンを更新することもできます。データベースのトークンを使用するたびに有効期限がチェックされ、トークンが次の5分間で期限切れになると、アプリケーションはトークンを更新/更新し、データベースに新しい有効期限を付けて新しいトークンを保存し、ドキュメントを取得することができます。

データベースに格納するのが複雑すぎる場合、Webサーバー自体の一時ファイルにトークンと有効期限を格納し、上記の2つの方法のいずれかを使用してトークンを更新することを検討できます。違いは、トークンがデータベースではなくファイルに格納される点です。

関連する問題