В настоящее время мы реализуем аутентификацию SAML с использованием Owin с Kentor в .NET. Мы правильно читаем токен, и я возвращаю все претензии. Однако, когда я разбираю объект User.Identity, возвращаемый мне Owin, на нем нет имени (которое я бы использовал, если бы использовал Azure Active Directory и т. Д.). Кто-нибудь знает, как использовать некоторые из возвращающихся требований из токена, чтобы установить User.Identity.Name? В этом случае рассматриваемые претензии являются EmpFirstName и EmpLastName.С помощью аутентификации Kentor SAML существует ли способ настроить User.Identity.Name?
ответ
Есть два способа сделать это.
- Реализовать
ClaimsAuthenticationManager
(см документацию Kentor AuthServices в GitHub репо), который представляет собой механизм обратного вызова при создании претензий. Вы также можете использовать уведомлениеAcsCommandResultCreated
, если найдете это более простым в использовании. Там добавьте требуемое имя, которое вы хотите (например, путем объединения существующих претензий на имя и фамилию). - Если вы хотите, чтобы
Identity.Name
указал на существующую заявку, измените свойствоNameClaimType
идентификатора.
Просто добавить третий вариант к двум (лучше) ответам, которые Андерс предоставили:
Когда мне нужно сделать, это я нашел утверждение, что я хотел быть именем пользователя и создал новую претензию :
subject.AddClaim(new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",claim.Value));
Идентификация распознает его.
Я сыграю с этим и посмотрю, что получится. Спасибо. –
Нет проблем. Там могут быть лучшие места, чтобы поместить его, но я пошел в ProcessAuthenticationStatement, поскольку я не был уверен, на каком этапе претензии обрабатываются в личность и хотят убедиться, что я зашел заранее. – David
Это отлично сработало для меня. – dmitreyg
Благодарим за быстрый ответ. Вопрос: поскольку мы делаем это с помощью кода в отличие от конфигурации, похоже, что мы будем использовать следующее: spOptions.SystemIdentityModelIdentityConfiguration.ClaimsAuthenticationManager.LoadCustomConfiguration(), где нам нужно будет пройти в XML, чтобы понять. Каким будет пример XML, который нам нужно передать, чтобы объединить EmpFirstName и EmpLastName из существующих претензий в свойство Identity.Name? –