#asp.net-core
#asp.net-core
Вопрос:
Я немного удивлен тем, как ClaimsPrincipal
и ClaimsIdentity
работают в ASP.NET Ядро и столкнулся с ситуацией, которая мне непонятна:
- Может ли a
ClaimsIdentity
быть аутентифицирован (IsAuthenticated
= True) и иметьno
претензии? - Могут
ClaimsIdentity
ли утверждения, не прошедшие проверку подлинности (IsAuthenticated
= False)but have
?
Я также не совсем уверен, как IsAuthenticated
здесь работает: по-видимому, запрашивается только один тип. https://github.com/microsoft/referencesource/blob/master/mscorlib/system/security/claims/ClaimsIdentity.cs
Ответ №1:
AuthenticationType
Свойство доступно только для чтения, поэтому вы можете выполнить ClaimsIdentity
проверку подлинности, отправив его только при его создании:
var authenticationType = "Signature";
var identity = new ClaimsIdentity(authenticationType);
Как вы можете видеть из источника, на который вы ссылались, IsAuthenticated
свойство просто проверяет, что m_authenticationType
оно существует.
Итак, ответ на оба ваших вопроса — «да».
Комментарии:
1. Да, до сих пор я мог видеть это в коде. Но поведение для меня неясно и важно для модульных тестов.
When
тип передается, и что происходит с утверждениями на основе типа? Я думаю, что каждое аутентифицированное утверждение имеет по крайней мере утверждение NameIdentifier . И всегда ли неаутентифицированный идентификатор без каких-либо претензий?2. Это не имеет ничего общего с утверждениями, только с тем, существует ли тип аутентификации. И тип аутентификации может быть установлен только из конструктора. Итак, в модульном тестировании просто убедитесь, что вы отправляете тип аутентификации при создании экземпляра
ClaimsIdentity
(как показано в коде выше).3. Спасибо, но это был не мой вопрос: -/ Я спросил о поведении , а не о том, как работает одна строка кода. Когда тип передается ASP.NET а когда нет? Будут ли установлены утверждения, если тип не передан? Другими словами, взаимодействие аутентификации и утверждений.
4. Нет необходимости понижать голос. Я ответил на оба ваших вопроса («да» на оба). Что касается поведения утверждений, вы можете видеть из источника, на который вы ссылались, что оба
m_instanceClaims
иm_externalClaims
всегда инициализируются пустыми коллекциями (если утверждения также не отправляются в конструктор). Я не уверен, в чем может быть путаница.