6

私はここでいくつかの投稿を読みましたが、まともな答えを見つけることができないようです、誰かが助けてくれることを願っています。

追加できることを確認しました

[認証する]

mvcコントローラーの属性。これは、人々がログインできるWebサイトの状況では妥当ですが、私はiOSアプリがWebサービスと通信しています。アプリへのアクセスのみを制限したいのですが。

必要な「ステップ」は次のとおりだと思います。

  1. ある種の「[authenticate]」属性をすべてのwebapiアクションに追加します(またはグローバルレベルではさらに良い)
  2. Webサービスへのある種のSSL証明書を作成します
  3. ある種の認証方法を追加し、アプリコードにクレデンシャルをハードコーディングします

これまたは同様のものは、MVCフレームワークを活用してどのように達成できますか?

(追記:このような投稿を見たことがありますが、このロジックをすべてのコードアクションに追加することは非常に非現実的です。また、どのような「チャレンジ」を作成しますか??)

4

1 に答える 1

12

Web サービスに対して自分自身を認証する簡単な方法がいくつかあります。特別なものを使用したり、OAuth や OpenID などの標準に従う必要さえありません (これらが悪いというわけではありませんが、理解を深めたいと思われます)。簡単なものでドアに)。

最初に行う必要があるのは、 AuthorizeAttribute( MVC のものではなく、System.Web.Http 名前空間にあるもの) から派生する方法を学ぶことです。関数をオーバーライドしてOnAuthorization、認証ロジックをそこに配置します。ヘルプについては、MVC Api Action & System.Web.Http.AuthorizeAttribute - How to get post parameters? を参照してください。

次に、認証方法を決定します。最も基本的な形式では、 と呼ばれる各 Web 要求にヘッダーを追加するようなことができますMyID: [SomeRandomString]。次に、OnAuthorizationメソッドでリクエストのヘッダーを確認し、正しい文字列でない場合は、レスポンス ステータス コードを 401 (未承認) に設定します。

サービスが自己ホストされている場合は、ホストしているポートに証明書をバインドし、https:// プレフィックスを使用できます。これでトランスポート レイヤーが保護され、渡された ID/パスワードを他の人が見ることができなくなります。IIS でホストしている場合は、それを介して証明書をバインドできます。プレーンな HTTP でパスワードのようなものを渡すことは安全ではないため、これは重要です。


カスタム AuthorizeAttribute を作成する

public class PasswordAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        try
        {
            string password = actionContext.Request.Headers.GetValues("Password").First();

            // instead of hard coding the password you can store it in a config file, database, etc.
            if (password != "abc123")
            {
                // password is not correct, return 401 (Unauthorized)
                actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
                return;
            }
        }
        catch (Exception e)
        {
            // if any errors occur, or the Password Header is not present we cannot trust the user
            // log the error and return 401 again
            actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
            return;
        }
    }
}

[PasswordAuthorize]
public class YourController : ApiController
{
}

自己署名証明書の生成

自己署名証明書を生成する最も簡単な方法は、IIS を開き、サーバー証明書をクリックしてから、http://www.sslshopper.com/article-how-to-create-a-selfに示すように「自己署名証明書を生成」することです。 -署名済み証明書-in-iis-7.html


証明書をポートにバインドする

http://msdn.microsoft.com/en-us/library/ms733791.aspx

netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} 

https を介して Web API サービスを自己ホストする方法に関する素晴らしいチュートリアルを次に示します。 -api/


于 2013-01-28T08:33:12.087 に答える