18

Web Api の作業を開始し、単純な基本認証を作成したいだけです。その方法を知りたいですか?

指定された MSDN リンクを試してみましたが、MSDN には段階的なチュートリアルはありません。 http://www.asp.net/web-api/overview/security/basic-authentication

4

3 に答える 3

34

あなたが提供したリンクは、必要な詳細の多くを提供します。これが空白を埋めることを願っています.

注: Web.API 2 を使用している場合、Microsoft は認証フィルターを使用した別のアプローチを提案しています。

サーバーに https を設定する

真のセキュリティが必要な場合、これは非常に重要です。そうしないと、スヌーピング パーティによってパスワードが収集される可能性があります。これを行う方法は、セットアップに完全に依存するため、詳しく説明しませんが、Azure WebRole で作業している場合は、Microsoft からSSL をセットアップするための非常に優れたステップバイステップ ガイドがあります。

これは次のステップでは必須ではありませんが、コードをリリースする前に実行する必要があります。通常、この部分には他の人 (サーバー構成のシステム管理者、証明書を購入する財務など) が関与するため、最初に言及します。彼らに多くの警告を与えるのは良いことです。

認証を行うためのカスタム IHttpModule を作成 (またはスチール) します。

これは、リンク内の C# コードの大きなブロックです。ブラウザーから送信された値を解析し、HttpContext.Current.User を認証済みユーザーに設定します。肉をコピーして、独自のアプリケーションのクラスに貼り付けるだけです。後で説明します。コードには次の using ステートメントが必要です。

using System; using System.Net.Http.Headers; using System.Security.Principal;
using System.Text; using System.Threading; using System.Web;

そのモジュールをアプリケーションに関連付けます

web.config ファイルに新しいモジュールを追加します (system.webServer はおそらく既に存在することに注意してください)。

<system.webServer>
  <modules>
    <add name="BasicAuth" type="Full.ClassName.Path.BasicAuth, Assembly.Name"/>
  </modules>
</system.webServer>

サイトの関連部分へのアクセスを制限する

アクション定義の前に [Authorize] 属性を追加することで、特定のアクションをブロックできます。コントローラー クラスの前に追加して、コントローラー全体をブロックします。

[Authorize] // Restricts access to whole controller    
public class StockController : ApiController {
    [Authorize] // Restricts access to this action - not necessary if whole controller restricted.
    public IEnumerable<StockLevel> Get() {

または、App_Start\WebApiConfig.cs ファイルに追加するconfig.Filters.Add(new AuthorizeAttribute());と、すべてがロックされます。

注意すべき点 -System.Web.Mvc.AuthorizeAttributeその名前空間が含まれていると、混乱を招く結果が得られる可能性もあります。

この時点で、試してみることができます - user: "user", pass: "password".

ユーザー検証をカスタマイズする

リンクから盗んだクラスに戻ると、次のコード ブロックが表示されます。

// TODO: Here is where you would validate the username and password.
private static bool CheckPassword(string username, string password)

ユーザー名とパスワードが有効な場合に true を返すようにこれを変更します。独自のものを展開している場合は、bcrypt (ネットからダウンロードした実装を信頼しますか?)、PBKDF2、またはCrypto クラス(シンプルですが、それほど安全ではありません) を調査することをお勧めしますが、Microsoft からはもっと良いものがたくさんあるので、おそらく何かがあるでしょう。パスワードを適切に保存することに関する懸念。

于 2013-04-23T14:32:18.957 に答える
1

コントローラーごとまたはメソッドごとに基本認証を選択的に有効にするには、この質問AuthorizeAttributeで説明されているように派生させることができます。

于 2013-09-25T14:21:51.803 に答える