web-dev-qa-db-ja.com

REST APIキー生成戦略

REST JAX-RS標準を使用して実装されたAPIに承認と認証を提供する必要があります。これは、モバイルクライアントと一部のデバイスから使用されることを目的としています。一意のデバイスIDを持つ複数のデバイスがあります。 POST一部のデータ。モバイルクライアントはGETリクエストを使用してそのデータを表示しています。クライアントを認証するPOSTの部分についてもっと心配しています。 。また、シンプルにしたいと思います。APIキーを使用してHTTPS経由でシンプルなHTTP基本認証を使用することを考えています。私の質問は、このAPIキーをどのように生成するかです。

12
Salil

Shiroを調べることができます: http://shiro.Apache.org API(認証、認証、その他のセキュリティのためのもの)を「保護」するための非常に優れたフレームワークです。 「基本認証」を実装して(ユーザー名/パスワードを介して)ユーザーに「ログイン」し、APIキーを提供します。これを使用して、「ベアラートークン認証」を実行し、ユーザーがのリソースにアクセスできるようにします。 API。これを行うには、APIリソース上で定義されるshiroが「フィルター」と呼ぶものを定義します...これは「shiro.ini」で次のように定義されます。

[main]
authcBasicRealm = com.yourapp.shiro.UserAuthenticatorRealm
tokenValidatorFilter = com.yourapp.shiro.BearerAuthenticationTokenFilter
tokenValidatorRealm = com.yourapp.shiro.BearerAuthenticationTokenRealm

[urls]
/rest/hello/login/** = ssl[8443], noSessionCreation, authcBasic
/rest/hello/hello = ssl[8443], noSessionCreation, tokenValidatorFilter

Shiroのデフォルトフィルターのいくつかを実装/拡張して、DBと連携してユーザー認証データなどを取得する必要があります。すばらしいのは、APIキーの生成、APIキーの生成など、セキュリティの問題を処理するための多くのツールを提供することです。ソルトや暗号化など。彼らのチュートリアルを見てください、彼らは一般的にとても良いです。

他にもフレームワークがあります。つまり、Java EEはセキュリティをサポートし、Springもセキュリティをサポートしています。MatRaibleによるこの非常に素晴らしいプレゼンテーションを見てください。彼はこれらの3つのフレームワークを紹介およびデモしています。 http://www.slideshare.net/mraible/Java-web-application-security-denver-jug-201

9
emgsilva

これには [〜#〜] uuid [〜#〜] を使用できます。 UUIDは次のようになります。

550e8400-e29b-41d4-a716-446655440000

すべてのプログラミング言語で利用可能なUUIDを生成するためのライブラリがあります。

0
user1907906

私もこれを検討しています。JAX-RS標準に依存し、アプリケーションを「純粋」に保ちたい場合は、コンテナーに付属するデフォルトの認証システム(通常はBASIC認証)を使用します。

つまり、コンテナは、Java EEアプリは標準に従い、回避策を構築しません(つまり、Shiroを使用する)などの認証とコースレベルの承認を実行する必要があります。

ただし、アプリケーションが認証システムを実装しないようにしながらAPIトークンなどの概念を使用する場合は、その作業を他の場所、つまりコンテナーに実装する必要があります。

残念ながら、コンテナベースの認証はコンテナ固有である必要があります。 JAASは、認証レルムを実行するための標準コンテナAPIについては説明していません。彼らのチュートリアルでさえ http://docs.Oracle.com/javaee/6/tutorial/doc/bnbxj.html Glassfish固有の構成について説明しています。

組織が十分に大きい場合、DataPowerはOAuth http://www.ibm.com/developerworks/websphere/library/techarticles/1208_rasmussen/1208_rasmussen.html もサポートします。したがって、おそらくこれを使用して認証を管理し、適切な資格情報をアプリケーションに渡すことができます。ただし、ベンダー固有の処理を行う必要があります。

それは悪いことではありませんが、独自の認証システムでアプリケーションを汚染するのではなく、このアプローチを実行したいので、認証システムが変更された場合に柔軟性がなくなります。例えばSonarQubeには、クライアント側の証明書をサポートしない独自の認証システムがあります。

0