Использование API с пользователем и пропуском JavaScript - PullRequest
0 голосов
/ 09 января 2020

У меня API из Wordpress - он использует имя пользователя и пароль. Это было ранее встроено в систему, над которой я работаю. Вызовы API выполняются из внешнего интерфейса, поэтому учетные данные жестко запрограммированы и их можно увидеть в коде и в chrome инструментах разработки. Это не очень хорошая идея, поэтому я хочу перенести ее в код позади. Какой лучший способ решить эту проблему? Переместить весь вызов на задний план? Создать конечную точку? Использовать сеансы?

Я видел много идей, но я хочу простейшее, которое не требует столько работы с вызовом ajax. Я читал много решений, но они, похоже, переделывают эту часть приложения.

function authApi() {
    return $.ajax({
        url: 'https://xxxxxxxxx/token',
        method: 'POST',
        dataType: 'json',
        data: $.param({ username: 'user', password: 'nnnnnnnnnnnn' }) 
    })

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Создан WebMethod в веб-формах:

       [WebMethod]
        public async Task<string> AuthenticateApi()
        {            
            string json = new JavaScriptSerializer().Serialize(new
            {
                username = ConfigurationManager.AppSettings["username"].ToString(),
                password = ConfigurationManager.AppSettings["password"].ToString()
            });

            string contents;

            using (var client = new HttpClient())
            {
                var response =  await client.PostAsync(ConfigurationManager.AppSettings["Url"].ToString(),  
new StringContent(json, Encoding.UTF8, "application/json"));

                contents = await response.Content.ReadAsStringAsync();
            }

           return contents;
        } 

Или вы также можете использовать HttpPost в MVC:

            [HttpPost]
            [AllowAnonymous]
            public async Task<string>  AuthenticateApi()
            {
                string json = new JavaScriptSerializer().Serialize(new
                {
                    username =  ConfigurationManager.AppSettings["username"].ToString(),
                    password =  ConfigurationManager.AppSettings["password"].ToString()
                });

                var url = ConfigurationManager.AppSettings["Url"].ToString();

                using (var client = new HttpClient())
                {
                    var response = client.PostAsync(url, new StringContent(json, Encoding.UTF8, "application/json"));

                    var contents = await response.Result.Content.ReadAsStringAsync();

                    return contents;
                }
            }

Затем вызвать Javascript следующим образом:

function authApi() {
    return $.ajax({
        url: '../AuthenticateApi',
        method: 'POST',
        dataType: 'json'
    }).done(function (response) {
        localStorage.setItem('AuthorizationData', JSON.stringify(response));
0 голосов
/ 10 января 2020

Аутентификация: предназначена для идентификации пользователя. Это может быть OAuth или user / password, или вы можете использовать службу, такую ​​как Firebase Auth.

Защитите свой API, вы можете использовать API-шлюз, чтобы разрешить только запрос из какого-то домена, ограничение скорости, ограничение только с какого-то IP. Опять же, я фанат Google, вы можете изучить Cloud Endpoints или использовать Kong, хорошую альтернативу.

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