/// <summary> /// Configura o token valido. /// </summary> /// <param name="token"></param> /// <param name="checkResult">Resultado da verificação do </param> protected virtual void ConfigureValidToken(string token, Colosoft.Security.TokenConsultResult checkResult) { Colosoft.Security.UserContext.Current.SetAuth(checkResult.UserName, token); if (checkResult.ProfileId > 0) { Colosoft.Security.Profile.ProfileManager.SetCurrentProfile(new Lazy <Colosoft.Security.Profile.ProfileInfo>(() => checkResult.GetProfileInfo()), true); } }
/// <summary> /// Valida o token informado. /// </summary> /// <param name="token"></param> /// <returns></returns> public static ValidateResult Validate(string token) { if (string.IsNullOrEmpty(token)) { return(new ValidateResult { Success = false, Message = ResourceMessageFormatter.Create(() => Properties.Resources.FaultException_EmptyToken) }); } Colosoft.Security.TokenConsultResult checkResult = null; try { checkResult = Colosoft.Security.Tokens.Check(token); } catch (Exception ex) { var message = ResourceMessageFormatter.Create(() => Properties.Resources.Exception_TokenCheckingError, Colosoft.Diagnostics.ExceptionFormatter.FormatException(ex, true)); return(new ValidateResult { Success = false, Exception = ex, Message = message }); } if (checkResult == null || !checkResult.Success) { return(new ValidateResult { Success = false, Message = ResourceMessageFormatter.Create(() => Properties.Resources.FaultException_InvalidToken, checkResult.Message) }); } try { Colosoft.Security.UserContext.Current.SetAuth(checkResult.UserName, token); if (checkResult.ProfileId > 0) { Colosoft.Security.Profile.ProfileManager.SetCurrentProfile(new Lazy <Colosoft.Security.Profile.ProfileInfo>(() => checkResult.GetProfileInfo()), true); } } catch (Exception ex) { return(new ValidateResult { Success = false, Exception = ex, Message = ResourceMessageFormatter.Create(() => Properties.Resources.FaultException_SetAuthError) }); } return(new ValidateResult { Success = true, TokenConsultResult = checkResult }); }
/// <summary> /// Método acionado depois de receber a mensagem do serviço. /// </summary> /// <param name="request">Dados da requisição da mensage.</param> /// <param name="channel">Canal usado na comunicação.</param> /// <param name="instanceContext">Contexto da instancia.</param> /// <returns></returns> public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext) { string token = null; if (request.Properties.ContainsKey("httpRequest")) { var prop = (HttpRequestMessageProperty)request.Properties["httpRequest"]; token = prop.Headers[TokenHeaderName]; } if (string.IsNullOrEmpty(token)) { var tokenHeaderIndex = request.Headers.FindHeader(TokenHeaderName, Namespace); if (tokenHeaderIndex >= 0) { var headerReader = request.Headers.GetReaderAtHeader(tokenHeaderIndex); token = headerReader.ReadElementContentAsString(); } } if (string.IsNullOrEmpty(token)) { var reason = new System.ServiceModel.FaultReason(ResourceMessageFormatter.Create(() => Properties.Resources.FaultException_EmptyToken).Format(System.Globalization.CultureInfo.CurrentCulture)); var code = new System.ServiceModel.FaultCode(EmptyTokenFaultReasonCode, Namespace); throw new System.ServiceModel.FaultException(reason, code); } Colosoft.Security.TokenConsultResult checkResult = null; try { checkResult = Colosoft.Security.Tokens.Check(token); } catch (Exception ex) { var message = ResourceMessageFormatter.Create(() => Properties.Resources.Exception_TokenCheckingError, Colosoft.Diagnostics.ExceptionFormatter.FormatException(ex, true)).Format(); throw new Exception(message, ex); } if (checkResult == null || !checkResult.Success) { var reason = new System.ServiceModel.FaultReason(ResourceMessageFormatter.Create(() => Properties.Resources.FaultException_InvalidToken).Format(System.Globalization.CultureInfo.CurrentCulture) + " " + checkResult.Message); var code = new System.ServiceModel.FaultCode(InvalidTokenFaultReasonCode, Namespace); throw new System.ServiceModel.FaultException(reason, code); } ConfigureValidToken(token, checkResult); return(null); }