Как настроить безопасные УСПОКОИТЕЛЬНЫЕ сервисы с WCF, использующим имя пользователя/пароль + SSL

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
24
задан Toran Billups 24 January 2012 в 02:46
поделиться

7 ответов

ОБНОВЛЕНИЕ 23.01.2012

С тех пор, как я написал этот вопрос, я увидел гораздо лучший подход к защите REST, как веб-сервисы в дикой природе. Это звучало сложно, когда я впервые услышал об этом, но идея проста и доступна в Интернете как для веб-сервисов, так и для других безопасных коммуникаций.

Требуется использование открытых / закрытых ключей.

1.) Каждому пользователю (клиенту) конечной точки необходимо зарегистрироваться в веб-службе REST.

  • a.) Вы предоставляете этому пользователю закрытый ключ, который не должен передаваться никому
  • b.) Вы также генерируете открытый ключ, который при необходимости может передаваться по проводам в виде простого текста (он также будет использоваться для идентификации клиента)

2.) Каждый запрос от пользователя должен сгенерировать хеш для подписи запроса

  • a.) Один из примеров этого может выглядеть следующим образом: закрытый ключ + временная метка + кодированная полезная нагрузка (если достаточно мала, как простая информация пользователя например, для обновления)
  • b.) вы берете эти 3 (или что бы вы ни выбрали) и генерируете односторонний хэш (например, с помощью hmac)
  • c.) в запросе При отправке по сети вы включаете открытый ключ (чтобы серверная сторона знала, кто пытается отправить этот запрос), сгенерированный хэш с закрытым ключом и временная метка.

3.) Конечная точка сервера (ваш метод REST) ​​должна будет генерировать хеш, используя те же входные данные, которые используются на клиенте. Этот шаг докажет, что и клиент, и сервер знают закрытый ключ, который соответствует открытому ключу, переданному вместе с запросом. (это, в свою очередь, означает, что пользователь, отправляющий запрос, является законным, поскольку никто другой не мог знать секретный ключ)

  • a.) поиск личного ключа клиента по открытому ключу, передаваемому вместе во время запроса

  • b.) возьмите другие параметры (временную метку и кодированную полезную нагрузку) вместе с закрытым ключом, который вы нашли на предыдущем шаге, и используйте тот же алгоритм для генерации одностороннего хэш (опять-таки, hmac - это то, что я видел в реальном мире)

  • c.) полученный 1-хэшированный хэш должен соответствовать хешу, посланному по проводам, если не отправлять обратно 400 ( или любой другой http-код, который вы считаете «плохим запросом»)
1
ответ дан Toran Billups 29 November 2019 в 00:28
поделиться

Вот подкаст о защите служб WCF REST с поставщиком членства ASP.net:

http://channel9.msdn.com/posts/rojacobs/endpointtv-Securing-RESTful-services- с-ASPNET-членства /

3
ответ дан denis phillips 29 November 2019 в 00:28
поделиться

Я согласен с Даррелом, что сложные сценарии REST для WCF - плохая идея. Это просто не красиво.

Тем не менее, Доминик Байер имеет хороших сообщений об этом в своем блоге с наименьшими привилегиями.

Если вы хотите увидеть поддержку аутентификации WSSE с отступлением от поддержки FormsAuthenticationTicket в WCF, ознакомьтесь с исходным кодом BlogService .

2
ответ дан JarrettV 29 November 2019 в 00:28
поделиться

Прежде чем вы продолжите идти по этому пути борьбы за внедрение REST поверх WCF, я предлагаю вам прочитать этот пост Тима Эвальда. На меня особенно произвело впечатление следующее утверждение:

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

Последние 12 месяцев я потратил на разработку материалов на основе REST для WCF, и это утверждение снова и снова подтверждается. ИМХО, что WCF приносит на стол, перевешивается сложностью, которую он вводит для выполнения работы REST.

1
ответ дан Darrel Miller 29 November 2019 в 00:28
поделиться

Независимо от того, есть ли у сообщества мнения против REST на WCF (я лично нахожусь на заборе) Microsoft провела на этом укол, http://msdn.microsoft. ком / EN-US / NetFramework / cc950529.aspx

1
ответ дан MotoWilliams 29 November 2019 в 00:28
поделиться

Да согласился с Moto, ссылка от Стартового набора WCF является самой близкой вещью, которую я видел к аутентификации учетных данных с помощью пользовательского HTTP-заголовка ( http://msdn.microsoft.com/en-us/library/dd203052.aspx ).

Однако я не мог получить движение в качестве примера.

1
ответ дан GONeale 29 November 2019 в 00:28
поделиться

Попробуйте custombasicauth @ codeplex

1
ответ дан Elijah Glover 29 November 2019 в 00:28
поделиться
Другие вопросы по тегам:

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