0

私はasp.net Web APIに取り組んでいます。jquery ajax呼び出しを使用してコントローラー(セキュリティ)を呼び出そうとしています。コントローラーに、次のような3つのパラメーターを持つメソッドがあります。

public WebRequest GetRequest(string method,string type,string endpoint)
        {
        RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
        var request = WebRequest.Create(endpoint);
        request.Method = method;
        request.ContentType = type;
        UnicodeEncoding enc = new UnicodeEncoding();
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
        request.Headers.Add("Authorization-Token", RSAClass.StringConverter(RSAClass.RSAEncrypt(enc.GetBytes("User1"), rsa.ExportParameters(false), false)));
        return request;
}

そして、私は次のようなjquery ajax呼び出しを行っています

CreateRequest("GET", "application/json;charset=utf-8", "http://localhost:49847/api/Security", function (request) { alert("Hello"); });  


function CreateRequest(method, type, endpoint, callback) {
        $.ajax({
            url: "api/Security",
            data: { method: method, type: type, endpoint: endpoint }, 
            type: "GET",
            contentType: "application/json;charset=utf-8",
            statusCode: {
                200: function (request) {
                    callback(request);
                }
            }
        });

また、次のような認証トークンを検証するための customfilterattribute クラスがあります。

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            string token;
            try
            {
                token = actionContext.Request.Headers.GetValues("Authorization-Token").First();
            }
            catch
            {
                actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest) { Content = new StringContent("missing authorization token") };
                return;
            }
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                UnicodeEncoding enc = new UnicodeEncoding();
                AuthUsersRepository.GetAllUsers().First(x => x.Name ==enc.GetString(RSAClass.RSADecrypt(RSAClass.ByteConverter(token), RSA.ExportParameters(true), false)));
                base.OnActionExecuting(actionContext);
            }
            catch
            {
                actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden) { Content = new StringContent("Unauthorized User") };
                return;
            }
        }

最初のリクエストを作成するときに、認証トークンを要求します。また、3 つのパラメーター (メソッド、タイプ、エンドポイント) に null 値が表示されます。教えて。

4

2 に答える 2

2

あなたはこれを必要とします:

data: { 'method': method, 'type': type, 'endpoint': endpoint },

これはリクエストの値を渡しますが、あなたの例では、その値がコントローラー/アクションの URL である場合、エンドポイントをパラメーターとしてメソッドに渡す必要がある理由がわかりませんか?

于 2012-06-20T00:25:54.393 に答える
0

あなたはする必要があります

1) GET を変更して、データを JSON として POST します。GET にコンテンツを含めることはできません。2) データをクエリ文字列パラメーターとして渡す

私が自分でやるなら、ケース2に行きます:

http://localhost:49847/api/Security?method=someMethod&type=someType&endpoint=someendpoint 

これはセキュリティ関連であるため、 HTTPS である必要があります

しかし、私はそれを自分で行うのではなく、セキュリティの専門家が開発したものを使用します:「Thinktecture.IdentityModel.40」

https://github.com/thinktecture/Thinktecture.IdentityModel.40

于 2012-06-20T10:06:51.283 に答える