ASP.NETを使用して独自の基本HTTP認証を実装できます。それは非常に複雑な仕様のようなdoesn't seemですが、すべての詳細についてはRFC1945を参照してください。
私はそれをやらなければならない場合は、すべてのリクエストで実行されるHttpModule
から始め、HTTPヘッダーHTTP_AUTHORIZATION
をチェックします。基本認証のヘッダーであれば、ユーザー名とパスワードをデコードできます。ヘッダーが見つからないか、ユーザー名とパスワードが正しくない場合は、HTTP 401応答を返し、WWW-Authenticate
ヘッダーを追加します。
このような何か(テストしていませんが、あなたのアイデアを得る):
public class BasicAuthenticationModule: IHttpModule
{
public void Init(HttpApplication application)
{
application.AuthenticateRequest += new EventHandler(Do_Authentication);
}
private void Do_Authentication(object sender, EventArgs e)
{
var request = HttpContext.Current.Request;
string header = request.Headers["HTTP_AUTHORIZATION"];
if(header != null && header.StartsWith("Basic "))
{
// Header is good, let's check username and password
string username = DecodeFromHeader(header, "username");
string password = DecodeFromHeader(header, password);
if(Validate(username, password)
{
// Create a custom IPrincipal object to carry the user's identity
HttpContext.Current.User = new BasicPrincipal(username);
}
else
{
Protect();
}
}
else
{
Protect();
}
}
private void Protect()
{
response.StatusCode = 401;
response.Headers.Add("WWW-Authenticate", "Basic realm=\"Test\"");
response.Write("You must authenticate");
response.End();
}
private void DecodeFromHeader()
{
// Figure this out based on spec
// It's basically base 64 decode and split on the :
throw new NotImplementedException();
}
private bool Validate(string username, string password)
{
return (username == "foo" && pasword == "bar");
}
public void Dispose() {}
public class BasicPrincipal : IPrincipal
{
// Implement simple class to hold the user's identity
}
}
セキュアなHTTP POSTは安全なGETを最初に必要としますか? – anonWrkrB
オリジナルの投稿に貼り付けることができます。ちょうど編集をクリックして追加してください。あなたが今持っている状態では読むことができません。 – MethodMan
ごめんなさい。一定。 – anonWrkrB