/// <summary> /// Method that is called before client calls are sent and after service responses are returned. /// </summary> /// <param name="operationName">The name of the operation.</param> /// <param name="inputs">The objects passed to the method by the client.</param> /// <returns>The correlation state that is returned as the correlationState parameter in AfterCall - null if the correlation state is not used.</returns> public object BeforeCall(string operationName, object[] inputs) { // Get the value of the AuthorizationToken HTTP header IncomingWebRequestContext requestContext = WebOperationContext.Current.IncomingRequest; string authorizationToken = requestContext.Headers["AuthorizationToken"]; // Check if an authorization token has been supplied if (!String.IsNullOrWhiteSpace(authorizationToken)) { // Start the authorization process AuthorizationHandler authorizationHandler = new AuthorizationHandler(); authorizationHandler.Authorize(this.allowedUserTypes); // Check if the user is authenticated and authorized to execute the method if (!authorizationHandler.IsAuthenticated) throw new WebFaultException(HttpStatusCode.Unauthorized); else if (!authorizationHandler.IsAuthorized) throw new WebFaultException(HttpStatusCode.Forbidden); } else { throw new WebFaultException(HttpStatusCode.Unauthorized); } // We do not intend to use a correlation state, so we just return null return null; }
/// <summary> /// Constructor that sets the allowed UserTypes for execution of the method. /// </summary> /// <param name="allowedUserTypes">The allowed UserTypes for execution of the method.</param> public AuthorizationRequired(params UserType[] allowedUserTypes) { this.allowedUserTypes = allowedUserTypes; this.authorizationHandler = new AuthorizationHandler(); }
/// <summary> /// Default constructor. /// </summary> public AuthorizationOptional() { this.authorizationHandler = new AuthorizationHandler(); }