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/