ClientId является нулевым при вызове ValidateClientAuthentication с Ajax - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть следующий код, сгенерированный POSTMAN:

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://localhost:51734/token",
  "method": "POST",
  "headers": {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "application/json",
    "cache-control": "no-cache",
    "Postman-Token": "2879f786-3b1f-42fe-8198-b2193764d165"
  },
  "data": {
    "grant_type": "client_credentials",
    "client_id": "6E1JIQDEF0M"
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

При запуске кода выше сначала выполняется следующий код ниже:

        public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
        {

            string clientId = string.Empty;
            string clientSecret = string.Empty;
            ClientDTO client = null;

            if (!context.TryGetBasicCredentials(out clientId, out clientSecret))
            {
                context.TryGetFormCredentials(out clientId, out clientSecret);
            }

            if (context.ClientId == null)
            {
                //Remove the comments from the below line context.SetError, and invalidate context 
                //if you want to force sending clientId/secrects once obtain access tokens. 
                context.Validated();
                //context.SetError("invalid_clientId", "ClientId should be sent.");
                //return Task.FromResult<object>(null);
                return;
            }
}

Проблема Iесть, что context.ClientId всегда нулевой, и я не знаю почему.

Когда я делаю тот же запрос с C #, он работает:

        var client = new RestClient("http://localhost:51734/token");
        var request = new RestRequest(Method.POST);
        request.AddHeader("Postman-Token", "db182d32-9eff-4150-815e-2fd7d10ebd58");
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("Accept", "application/json");
        request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
        request.AddParameter("undefined", "grant_type=client_credentials&client_id=6E1JIQDEF0M&undefined=", ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);

Так почему он работает сC #, но не JavaScript?У кого есть идеи?

1 Ответ

0 голосов
/ 18 марта 2019

Попробуйте позвонить так из Javascript.

data : 'grant_type=client_credentials&client_id=6E1JIQDEF0M'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...