2016-10-08 16 views
1

このようなAPIキーを生成するために使用できるJava APIまたはアルゴリズムはありますか?私はJWT(JSON Web Token)について知っていますが、このAPIの問題は結果として得られるトークンが非常に長いことです。JavaでAPIトークンを生成するベストプラクティス

+1

長いAPIキーの何が問題なのですが?それらは通常長い必要があります。 –

+0

あなたのAPIキーがどれほど長くていいのですか?なぜ? –

+0

** UUID **はそのようなトークン生成クラス(128ビット)ですが、あなたのケースでは長すぎますが、ターゲットをオーバーシュートします。 –

答えて

1

これは、アプリケーションの希望する動作と、ステートフルかステートレスかに完全に依存します。 (HTTPセッションを維持するためにクッキーを使用して)古典的なステートフルなWebアプリケーションの

  • は、トークンは比較的短く、すべてのリクエストにクッキーに成功したログイン時に自動的にサーバーによって送信され、期待される/生成されています。アプリケーションサーバーは、自動的にそのトークンに添付されたセッションを検索します。
  • パフォーマンスヒットに気をつけないステートレスアプリの場合、上記とまったく同じ戦略をそのまま使用できます。成功したログイン時にUUIDを送信し、ヘッダー内のすべての要求に対して期待し、どこかのUUID-userマッピングを維持して、すべてのリクエストでユーザーの詳細を調べます。ここでのトークンは、推測可能になるため、UUIDよりも単純であってはなりません。
  • 可能な限り無駄のない状態を維持したいステートレスアプリケーションの場合、JWTのようなものが必要です。この場合、トークン自体にはすでにユーザーの詳細が含まれているため、ルックアップは必要ありません。欠点は、トークンを取り消すことは容易ではなく、明らかにトークンをはるかに大きくする必要があるということです。しかし、トークンのサイズはなぜ問題になるのでしょうかと尋ねることは重要です。
0

あなたが使用することができますのいずれかの方法により、org.apache.shiro.crypto.hash

public Sha256Hash() { 
    super(ALGORITHM_NAME); 
} 

public Sha256Hash(Object source) { 
    super(ALGORITHM_NAME, source); 
} 

public Sha256Hash(Object source, Object salt) { 
    super(ALGORITHM_NAME, source, salt); 
} 

public Sha256Hash(Object source, Object salt, int hashIterations) { 
    super(ALGORITHM_NAME, source, salt, hashIterations); 
} 

コード例:

public String createToken(Person person) { 
String token = new Sha256Hash(person.id,person.passwordSalt,1024).toBase64() 
return token} 
+0

JDKは完全に[ハッシング・データ](https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html)を単独で使用できます。なぜApache Shiroをミックスに導入するのですか? –

+0

申し訳ありませんが、あなたのコメントは絶対に意味がありません。 SHA256ハッシュは[標準](https://tools.ietf.org/html/rfc4634)で定義されていますが、Java、C++、またはグラフ計算機で計算された場合とまったく同じです。 JDKが提供する**何か**が準備ができていないか、** JDKの代わりに外部ライブラリを使用したいと思う場所がどこにあるのか分かりませんが、これは非常に間違っています事実、危険な考え方。 –

+0

あなたが正しいと思うかどうか議論したくありません。私はその質問に対して正しいと思ったので答えました。あなたは異なって考えることができ、それもOKです。私は最後のコメントを削除しましたが、あなたの反応を誇張していると思います。がんばろう。 – Rotem

関連する問題