Предоставление учетных данных безопасно к УСПОКОИТЕЛЬНОМУ API

Преобразование из целого в длинную форму английского языка ... Я мог бы написать это; -) - довольно хорошая статья на эту тему:

using System;

public class NumberToEnglish {
    private static string[] onesMapping =
        new string[] {
            "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine",
            "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"
        };
    private static string[] tensMapping =
        new string[] {
            "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"
        };
    private static string[] groupMapping =
        new string[] {
            "Hundred", "Thousand", "Million", "Billion", "Trillion"
        };

    private static void Main(string[] args) {
        Console.WriteLine(EnglishFromNumber(long.Parse(args[0])));
    }

    private static string EnglishFromNumber(int number) {
        return EnglishFromNumber((long) number);
    }

    private static string EnglishFromNumber(long number) {
        if ( number == 0 ) {
            return onesMapping[number];
        }

        string sign = "Positive";
        if ( number < 0 ) {
            sign = "Negative";
            number = Math.Abs(number);
        }

        string retVal = null;
        int group = 0;
        while(number > 0) {
            int numberToProcess = (int) (number % 1000);
            number = number / 1000;

            string groupDescription = ProcessGroup(numberToProcess);
            if ( groupDescription != null ) {
                if ( group > 0 ) {
                    retVal = groupMapping[group] + " " + retVal;
                }
                retVal = groupDescription + " " + retVal;
            }

            group++;
        }

        return sign + " " + retVal;
    }

    private static string ProcessGroup(int number) {
        int tens = number % 100;
        int hundreds = number / 100;

        string retVal = null;
        if ( hundreds > 0 ) {
            retVal = onesMapping[hundreds] + " " + groupMapping[0];
        }
        if ( tens > 0 ) {
            if ( tens < 20 ) {
                retVal += ((retVal != null) ? " " : "") + onesMapping[tens];
            } else {
                int ones = tens % 10;
                tens = (tens / 10) - 2; // 20's offset

                retVal += ((retVal != null) ? " " : "") + tensMapping[tens];

                if ( ones > 0 ) {
                    retVal += ((retVal != null) ? " " : "") + onesMapping[ones];
                }
            }
        }

        return retVal;
    }
}

6
задан mtrc 3 June 2009 в 13:36
поделиться

4 ответа

У вас более или менее есть 3 варианта:

  1. HTTP Auth
  2. Используйте собственный протокол, в идеале HMAC запрос / ответ на основе
  3. OAuth

В настоящее время OAuth подвержен разновидности фишинговых атак, которые в значительной степени не обнаруживаются целью. Поэтому я бы не рекомендовал его, пока протокол не будет изменен.

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

Это оставляет HTTP-аутентификацию, которая, вероятно, лучше всего, если вы можете ее использовать.

С учетом всего сказанного, почти все в Интернете использует аутентификацию на основе форм, и многие даже не беспокоятся о https для безопасности транспортного уровня, поэтому, возможно, просто отправьте текст пароля в открытом виде "достаточно хорош" для ваших целей.

5
ответ дан 16 December 2019 в 21:45
поделиться

Если вы можете добавлять HTTP-заголовки к своим запросам, вы можете просто добавить заголовок Authorization :

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

, где вы используете базовую аутентификацию, и QWxhZGRpbjpvcGVuIHNlc2FtZQ = = бит - это « имя пользователя: пароль » в кодировке base64 (без кавычек). RFC 2617

2
ответ дан 16 December 2019 в 21:45
поделиться

Ну, https не имеет ничего общего с аутентификацией, это просто шифрование на транспортном уровне.

если вы взаимодействуете с HTTP api, будь то https или нет, и диалоговое окно всплывает, это означает, что используется HTTP-аутентификация, базовая или дайджест. Если ваш клиент создает экземпляр http-клиента для чтения данных из этих «служб», вы можете передать эти учетные данные при создании экземпляра объекта.

Если вы используете клиентский сценарий, XmlHttpRequest также поддерживает HTTP-аутентификацию.

Итак с точки зрения кода то, как вы передаете учетные данные службам RESTful, зависит от используемого вами http-клиента (объекта, который вы создаете для получения данных). Вы можете просто получить такое имя пользователя / пароль самостоятельно у клиента и использовать его для вызова другой службы.

1
ответ дан 16 December 2019 в 21:45
поделиться

посмотрите на существующие решения. В данном случае oauth

0
ответ дан 16 December 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: