2013-07-22 3 views
1

Я пытаюсь активно обратиться к ADFS в проекте MVC 4.0. У нас будет несколько STS, и мы не сможем справиться с моим нынешним пониманием «пассивной» конфигурации аутентификации.MVC, ADFS 2.0 и WIF 4.5 проблемы

Я могут получить маркер от сервера ADFS, но когда я пытаюсь прочитать маркер, я получаю сообщение об ошибке Cryptographic наряду с внутренним исключением «Недопустимые данные».

* И рекомендация об ApplicationPool не является моей проблемой.

EndpointAddress endpointAddress = new EndpointAddress(OtherStsAddress); 
UserNameWSTrustBinding binding = new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential); 
WSTrustChannelFactory factory = new WSTrustChannelFactory(binding, endpointAddress); 
factory.Credentials.UserName.UserName = string.Concat(domain, "\\", username); 
factory.Credentials.UserName.Password = password; 
factory.TrustVersion = System.ServiceModel.Security.TrustVersion.WSTrust13; 
WSTrustChannel channel = (WSTrustChannel)factory.CreateChannel(); 
RequestSecurityToken rst = new RequestSecurityToken(RequestTypes.Issue, KeyTypes.Symmetric); 
rst.AppliesTo = new EndpointReference(YourStsAddress);  
var genericToken = channel.Issue(rst) as GenericXmlSecurityToken;     
var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers; 

// blowing up here 
var token = handlers.ReadToken(new XmlTextReader(new StringReader(genericToken.TokenXml.OuterXml))); 

var identity = handlers.ValidateToken(token).First();  
var sessionToken = new SessionSecurityToken(new ClaimsPrincipal(identity)); 
FederatedAuthentication.WSFederationAuthenticationModule.SetPrincipalAndWriteSessionToken(sessionToken, true); 
return token;  

Исключение заключается в следующем:

System.InvalidOperationException: ID1073: A CryptographicException occurred when attempting to decrypt the cookie using the ProtectedData API (see inner exception for details). If you are using IIS 7.5, this could be due to the loadUserProfile setting on the Application Pool being set to false. ---> System.Security.Cryptography.CryptographicException: The data is invalid. 

    at System.Security.Cryptography.ProtectedData.Unprotect(Byte[] encryptedData, Byte[] optionalEntropy, DataProtectionScope scope) 
    at System.IdentityModel.ProtectedDataCookieTransform.Decode(Byte[] encoded) 
    --- End of inner exception stack trace --- 
    at System.IdentityModel.ProtectedDataCookieTransform.Decode(Byte[] encoded) 
    at System.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte[] cookie, Boolean outbound) 
    at System.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver) 
    at System.IdentityModel.Tokens.SecurityTokenHandlerCollection.ReadToken(XmlReader reader) 
    at Compass.SupplyChain.UI.Controllers.Registration.RegistrationController.RequestSecurityToken(String domain, String username, String password) 

Любое направление будет иметь в виду, даже если у вас нет прямого ответа. Я даже не уверен, что делать дальше. Googling даже не возвращает полезные результаты на данный момент. Или, может быть, сейчас я просто ублюдок.

ответ

0

Возможно, вы, наверное, преодолели путь максимальной сложности :-). Какая у вас проблема с «пассивной конфигурацией»? Он должен просто работать.

Существует много примеров MVC 4/ADFS (или других STS).

Несколько образцов/ресурсы, чтобы посмотреть на:

+2

честно, я не могу найти много хороших, рабочих примеров. – Steve

+0

Это правда, там не так много в области WIF и простой федерации. Я пробираюсь через POC, построенную на Identity Server от Thinktecture. У них есть несколько хороших примеров, показывающих, как обработчики настроены при запуске приложения, а затем автоматически используются при обработке сообщений для загрузки идентификатора. Я также нашел цифру 8 на этой странице полезной. http://msdn.microsoft.com/en-us/magazine/ee335707.aspx – joezen777

Смежные вопросы