Мой контекст:
- .Net веб-сервис RESTful
- Клиент (смешанные платформы, технологии, возможности lib) получил маркер SAML
- Попытка принять токен для аутентификации/авторизации в службе REST
- в HTTP-авторизации/заголовок X-Authorization
- в качестве параметра запроса
- Будет также поддерживаться SWT позже, но нужно получить токены SAML
Подробнее:
У меня есть токен SAML в строке:
<saml:Assertion xmlns:saml="..." ...> ..etc... </>
В HttpModule я хочу преобразовать это в ClaimsPrincipal, чтобы моя служба могла выполнять обычный Thread.CurrentPrincipal как материал IClaimsPrincipal.
Я нашел пару соблазняющих страниц/блогов и т.д., которые выглядели полезными:
- Идея Cibrax для передачи маркера в заголовке HTTP-авторизации
- Доминик Байер на чем-то подобном для SWT, с упоминанием о том, как легко сделать то же самое для SAML
Я застрял буквально, пытаясь превратить маркер SAML в ClaimsPrincipal (через промежуточный шаг SecurityToken или прямой... счастливый в любом случае). Пример кода из идеи Cibrax использует для критического этапа проверки и десериализации следующее:
SecurityTokenSerializer securityTokenSerializer
= new SecurityTokenSerializerAdapter(
FederatedAuthentication.SecurityTokenHandlers,
MessageSecurityVersion.Default.SecurityVersion,
false, new SamlSerializer(), null, null);
SecurityToken theToken
= WSFederationAuthenticationModule.GetSecurityToken(
theSamlTokenInStringForm, securityTokenSerializer);
Стена, на которой я попал, - это то, что версия WIM RTM не подвергает этой перегрузке GetSecurityToken... она раскрывает только:
WSFederationAuthenticationModule fam = new WSFederationAuthenticationModule();
SecurityToken theToken = fam.GetSecurityToken(HttpRequest theRequest);
SecurityToken theToken = fam.GetSecurityToken(SignInResponseMessage message);
Спасибо, что помогли мне расклеиться!
Тайлер