2016-08-09 14 views
0

В настоящее время мы реализуем аутентификацию SAML с использованием Owin с Kentor в .NET. Мы правильно читаем токен, и я возвращаю все претензии. Однако, когда я разбираю объект User.Identity, возвращаемый мне Owin, на нем нет имени (которое я бы использовал, если бы использовал Azure Active Directory и т. Д.). Кто-нибудь знает, как использовать некоторые из возвращающихся требований из токена, чтобы установить User.Identity.Name? В этом случае рассматриваемые претензии являются EmpFirstName и EmpLastName.С помощью аутентификации Kentor SAML существует ли способ настроить User.Identity.Name?

ответ

0

Есть два способа сделать это.

  1. Реализовать ClaimsAuthenticationManager (см документацию Kentor AuthServices в GitHub репо), который представляет собой механизм обратного вызова при создании претензий. Вы также можете использовать уведомление AcsCommandResultCreated, если найдете это более простым в использовании. Там добавьте требуемое имя, которое вы хотите (например, путем объединения существующих претензий на имя и фамилию).
  2. Если вы хотите, чтобы Identity.Name указал на существующую заявку, измените свойство NameClaimType идентификатора.
+0

Благодарим за быстрый ответ. Вопрос: поскольку мы делаем это с помощью кода в отличие от конфигурации, похоже, что мы будем использовать следующее: spOptions.SystemIdentityModelIdentityConfiguration.ClaimsAuthenticationManager.LoadCustomConfiguration(), где нам нужно будет пройти в XML, чтобы понять. Каким будет пример XML, который нам нужно передать, чтобы объединить EmpFirstName и EmpLastName из существующих претензий в свойство Identity.Name? –

1

Просто добавить третий вариант к двум (лучше) ответам, которые Андерс предоставили:

Когда мне нужно сделать, это я нашел утверждение, что я хотел быть именем пользователя и создал новую претензию :

subject.AddClaim(new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",claim.Value)); 

Идентификация распознает его.

+0

Я сыграю с этим и посмотрю, что получится. Спасибо. –

+0

Нет проблем. Там могут быть лучшие места, чтобы поместить его, но я пошел в ProcessAuthenticationStatement, поскольку я не был уверен, на каком этапе претензии обрабатываются в личность и хотят убедиться, что я зашел заранее. – David

+0

Это отлично сработало для меня. – dmitreyg