web-dev-qa-db-ja.com

ASP.NET Web API 2のトークンまたはASP.NET Identityベースのセキュリティ

バックグラウンド

ASP.NET MVCまたはASP.NETプロジェクトの拡張なしのWeb API 2プロジェクトがあります。 APIは、サーバーとWindows 8、Windows Phone 8.1、iOSアプリケーション間の通信にのみ使用されます。 APIを使用するWebサイトはありません。 APIにより、ユーザーは倉庫内の製品を管理できます。ユーザーはデータベース内の製品を追加、削除、および確認できます。

public class User
{
    public int Id { get; set; }
    [Required]
    public string UserName { get; set; }
    [Required]
    public string DisplayName{ get; set; }
    [Required]
    public bool IsEnabled {get; set;}
}

特別なことは何もありません-Entitiy Frameworkのモデルにすぎません。もちろん商品のモデルも存在します。これはデータのセキュリティにとって重要ではないため、ユーザーからのパスワードは必要ありません。 APIのユーザーはお互いのユーザー名を知ることはなく、お互いの表示名だけを知っています。

問題点

問題は、Web APIのセキュリティに関するものです。 APIを全世界に公開したくありません。アプリケーションだけです。だから私は多くの研究を行ってきました、そして私はシナリオから次のような研究をしています:

シナリオ#1

APIで高レベルのセキュリティを確保する最善の方法は、次のとおりです。

  • SSLを使用する
  • クライアントのトークンベースの認証を使用する
  • 有効期限が非常に短いトークンを使用する
  • aSP.NET Identityを使用しない
  • アクションフィルターの代わりにメッセージハンドラーを使用するには
  • UserTokenフィールドをUserモデルに追加し、各ユーザーのトークンを生成する

シナリオ#2

APIで高レベルのセキュリティを確保する最善の方法は、次のとおりです。

  • sSLを使用する
  • aSP.NET Identityを使用してユーザー名とパスワードを使用する
  • aSP.NET Identityの認証に基づくトークンベースのアプローチを使用する

質問

  • 最善のアプローチは何ですか?シナリオ#1または#2?
  • 一般的に、APIを保護する最良の方法は何ですか?
  • 最善の方法は私のシナリオの1つですか?

2つのシナリオからアイテムを追加/削除してください。また、より安全な新しいシナリオを追加してください。

6
MikaelKP

何が起こっているのかを理解し、動作を制御する方が少し簡単だと思うので、私は賛成#1に投票します。私たちはこのアプローチを使用して、それほど大騒ぎすることなく、かなり大きな企業向けアプリを構築しました。また、必要に応じて簡単にカスタマイズできます(たとえば、ユーザーごとに1つのトークンで十分ですか?ユーザーが複数のデバイスから同時にログインする場合、複数のトークンが必要ですか?)。しかし、それは依存します-いつものように。どちらも完全に実行可能なアプローチです。基本的に、必要なすべての機能を備えていて、他の方法では不可能な場合でも、基本的にはより快適な方法です。

私たちのケース#1は実装が簡単で、すべてのニーズをカバーしていたので、あなたのケースは異なるかもしれません...

1
Evgeni