私は残りのWebサービスの世界ではまったく新しいもので、ASP.NETでREST Webサービスを実装しようとしてWeb上の記事をたくさん旅しました(並行して別のプロジェクトのWebフォームアプリケーションを使用)
WebServices はどの程度安全なのだろうか? ここで説明されているチュートリアルをセットアップします: http://www.codeproject.com/Articles/128478/Consuming-WCF-REST-Services-Using-jQuery-AJAX-Call
jquery を使用して Web サービスを呼び出すことはできますが、セキュリティはありません。
安全な HTTP ヘッダーを設定する必要がありますか? もしそうなら、どのように?
私が疑問に思っているもう 1 つのこと: HTML ページのソース コードを見る人は、「パスキー」または「ログイン」/「パスワード」を簡単に見つけることができますか?
あなたの助けが必要です:(ありがとう
編集 :
このコードを使用して、Rest サービスを jquery で呼び出します。
function setHeader(xhr) {
var secretkey = "userid:uCMfSzkjue+HSDygYB5aEg==";
var hashedUrl = secretkey;
var hashedUrlBase64 = hashedUrl.toString();
xhr.setRequestHeader('Authorization', hashedUrlBase64, "1234dgt");
}
$.ajax({
cache: false,
type: "GET",
async: false,
url: rootWS + "ListeService/GetListeSerie" + "(" + listeId + ")",
//data: "{'id':'" + listeId + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
...
},
error: function (msg) {
...
},
beforeSend: setHeader
});
そして、このコードを私の REST WS に:
[WebInvoke(Method = "GET", UriTemplate = "GetListeSerie({id})")]
public List<SeriePourListe> GetListeSerie(string id)
{
if (!Security.AuthenticateUser())
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
return null;
}
//do some stuff
}
public static class Security
{
public static bool AuthenticateUser()
{
WebOperationContext ctx = WebOperationContext.Current;
string requestUri = ctx.IncomingRequest.UriTemplateMatch.RequestUri.ToString();
string authHeader = ctx.IncomingRequest.Headers[HttpRequestHeader.Authorization];
// if supplied hash is valid, user is authenticated
if (IsValidUserKey(authHeader, requestUri))
return true;
return false;
}
public static bool IsValidUserKey(string key, string uri)
{
string[] authParts = key.Split(':');
if (authParts.Length == 2)
{
string userid = authParts[0];
string hash = authParts[1];
if (ValidateHash(userid, uri, hash))
return true;
}
return false;
}
private static bool ValidateHash(string userid, string uri, string hash)
{
if (!UserKeys.Contains(userid))
return false;
string userkey = userid;
byte[] secretBytes = ASCIIEncoding.ASCII.GetBytes(userkey);
HMACMD5 hmac = new HMACMD5(secretBytes);
byte[] dataBytes = ASCIIEncoding.ASCII.GetBytes(uri);
byte[] computedHash = hmac.ComputeHash(dataBytes);
string computedHashString = Convert.ToBase64String(computedHash);
return computedHashString.Equals(hash);
}
}