Булевское свойство или функция
С точки зрения эволюции кода, безопаснее использовать, например, перечисления (enum). Не «правильнее», а именно «безопаснее», в смысле будущих модификаций.

Вдруг (наверняка?) у вас возникнет необходимость в дополнительных способах аутентификации (OAuth например)? В случае использования перечислений (или других аналогов шаблона «визитёр» — типа case classes из Scala), среда разработки подскажет вам, где вы забыли учесть новый вариант аутентификации. Не знаю как Visual Studio, а Eclipse или IDEA выдадут предупреждение в следующем коде:
switch (principal.getAuthMethod()) {
case LOGIN: /* Login / password auth */
    break;
case CERTIFICATE: /* Certificate auth */
    break;
}

как только добавится новый тип аутентификации (OAUTH). Это даст вам знать, что вы забыли учесть новый способ ещё в каком-то месте.

Так что если IDE помогает в таком деле, то почему бы этим не воспользоваться?
Идеологически правильнее использовать наследование — ввести поле абстрактного класса «данные авторизации», и два производных класса — «авторизация по логину» и «авторизация по сертификату».