詳細なグラフィックスアプリケーションの複数のログイン認証コードの実装

ファイル

、春・セキュリティプロファイルと史郎コントラスト、formLoginのログイン認証モード、ダイナミックデータ入力の検証と権限の割り当てアカウントをこの春保障番号での一連の記事では、我々のような、知識のログイン認証および許可の多様性を導入している、でログイン失敗のロックを繰り返し、リメンバー・ミーが特徴私を忘れないでください、そしてより多くの記事。私たちは、分散アプリケーションに関連していない、これらの複数が、実際には非常に簡単だと思います。このセクションでは、様々な方法で実装確認コードを説明するために、アプリケーションの背景を配布します。私は書きます、特定の実装上のあなたのための理論的な観点からのこのセクションでは、最初に。

  • 店舗セッション認証コードが分散アプリケーションには適していません
  • 分散アプリケーションのコード共有セッションストレージ
  • 分散アプリケーションの検証コードに基づいて対称アルゴリズム

認証コード部分

検証コードと実際にビット分割謎、謎と神秘のような。謎の答えは通常のテキストで、通常の画像です。ショーのための謎、検証目的のための答え。

  • 文字コードについて。たとえば:謎の文字列「ABGH」絵で、答えは文字列「ABGH」であります
  • クラスコードの計算のため。たとえば:謎は、「1 + 1 =」絵で、答えは「2」であります
  • ドラッグタイプのコードについて。たとえば、次の謎は、ドラッグアンドドロップパズルは、答えはパズルの座標位置であります

要するに、謎のどのような形に関係なくは、検証と回答した最後のユーザーの内容を入力してください。

二、保存されたセッションコード

青は、クライアントのためのチェンピンクサービス側です。

ファイル

これは、コードの最も典型的な実装、比較的単純な実装です。

  • アプリケーションサーバーは、ランダムな文字コードを生成し、
  • セッション内で保存された文字コード
  • クライアントに応じて、文字画像コードを生成したコード
  • チェックしているユーザー入力の検証コード一貫した回答の内容

このような複数のセットとして、我々は、アプリケーションをデプロイセッションので、アプリケーションの展開のセット、:A、B、C、およびそれら各セッションが共有されていない持っているこの実装の利点は欠点は、比較的簡単です。結果は、スルー検証することができるように、認証コード及びAによって生成され、そしてBに対して検証要求に送信された画像です。

第三に、共有セッションコードが格納されています

問題の前記第二のセクションでは、問題は、実際に検証コードではなく、問題またはセッションを共有する一意性を確保する方法。二つの主要なソリューションがあります。

ファイル

  • 通常我们实现负载均衡应用的前端都是使用nginx或者haproxy,二者都可以配置负载均衡策略。其中一种策略就是:你的客户端ip上一次请求的是A应用,你的下一次请求还转发给A应用。这样就保证了session的唯一性。但是这种方式有可能会导致A、B、C应用其中一个或两个分配了大量的请求,而另外一个处理很少的请求,导致负载并不均衡。
  • 另外一种非常通用的方式就是将分布式应用的session统一管理,也就是说原来A、B、C各自的session都存在自己的内存中,现在更改为统一存储到一个地方,大家一起用。这样就实现了session的唯一和共享,是实现分布式应用session管理的有效途径。在Spring框架内,最成熟的解决方案就是spring session + redis 。可自行参考实现。

四、基于对称算法的验证码

可能出于主机资源的考虑,可能出于系统架构的考量,有些应用是无状态的。

  • 什么是无状态应用:就是不保存用户状态的应用。
  • 什么是用户状态:比如当你登陆之后,在session中保存的用户的名称、组织等等信息。
  • 所以可以简单的理解,无状态应用就是无session应用。当然这并不完全准确。

那么对于这些无状态的应用,我们就无法使用session,或者换个说法从团队开发规范上就不让使用session。那么我们的验证码该怎么做?

ファイル

  • 同样,首先要生成随机的验证码(谜底),但是不做任何存储操作
  • 将谜底(验证码文字)加上时间串、应用信息等组成一个字符串进行加密。必须是对称加密,也就是说可以解密的加密算法。
  • 生成验证码图片,并与加密后的密文,通过cookies一并返回给客户端。
  • 当用户输入验证码提交登录之后,服务端解密cookies中的密文(主要是验证码文字),与用户的输入进行验证比对。

这种做法的缺陷是显而易见的:实际上就是将验证码文字在客户端服务端之间走了一遍。虽然是加密后的验证码文字,但是有加密就必须有解密,否则无法验证。所以更为稳妥的做法是为每一个用户生成密钥,并将密钥保存到数据库里面,在对应的阶段内调用密钥进行加密或者解密。

暗号化の観点から言えば、暗号化アルゴリズムは対称的ではないことは絶対に安全です。それはより重要であるあなたの鍵を保護することです。誰もが絶対に安全ロックされていないのと同じように、もっと重要なのは、あなたの鍵を保護します。

あなたの注意を楽しみにして

おすすめ

転載: www.cnblogs.com/zimug/p/11955523.html