anchor.diff:  	lager:debug("accept_json: ~p~n", [AWSContext]),
   	lager:debug("Op: ~p~n", [Op]),
   
  -	case Operation of
  -		{error, unimplemented} -> {{halt, 501}, ReqData, AWSContext};
  -		{Module, Function} -> 
  -			Result = erlang:apply(Module, Function, [jsx:decode(wrq:req_body(ReqData)), AWSContext]),
  -			{true, wrq:set_resp_body(Result, ReqData), AWSContext}
  +	case AWSContext#ctx.user_key of
  +		undefined -> {{halt, 403}, wrq:set_resp_body(
  +			format_error_message("User Key Undefined"), ReqData), AWSContext};
  +		_ ->
  +			case Operation of
  +				{error, unimplemented} -> {{halt, 501}, wrq:set_resp_body(
  +					format_error_message("Operation Not Specified"), ReqData), AWSContext};
  +				{Module, Function} -> 
  +					Result = erlang:apply(Module, Function, [jsx:decode(wrq:req_body(ReqData)), AWSContext]),
  +					{true, wrq:set_resp_body(Result, ReqData), AWSContext}
  +			end
   	end.
  +
   
   %% Internal
   
   dynamo_user(AuthorizationHeader) ->
  -	[_, Credentials, _, _] = string:tokens(AuthorizationHeader, " "),
  -	StartCharPos = string:str(Credentials, "="),
  -	EndCharPos = string:str(Credentials, "/"),
  -	UserKey = string:substr(Credentials, StartCharPos + 1, EndCharPos - (StartCharPos + 1)),
  -	list_to_binary(UserKey).
  +	case AuthorizationHeader of
  +		undefined -> undefined;
  +		_ ->
  +			[_, Credentials, _, _] = string:tokens(AuthorizationHeader, " "),
  +			StartCharPos = string:str(Credentials, "="),
  +			EndCharPos = string:str(Credentials, "/"),
  +			UserKey = string:substr(Credentials, StartCharPos + 1, EndCharPos - (StartCharPos + 1)),
  +			list_to_binary(UserKey)
  +	end.
   
   dynamo_op(TargetHeader) ->
  -	case string:chr(TargetHeader, $.) of
  -		0 -> {TargetHeader, undefined};
  -		Pos -> {string:substr(TargetHeader, Pos+1), string:substr(TargetHeader, 1, Pos-1)}
  +	case TargetHeader of
  +		undefined -> {undefined, undefined};
  +		_ ->
  +	  		case string:chr(TargetHeader, $.) of
  +				0 -> {TargetHeader, undefined};
  +				Pos -> {string:substr(TargetHeader, Pos+1), string:substr(TargetHeader, 1, Pos-1)}
  +			end
   	end.
  +
  +format_error_message(Message) ->
  +	"{\n  \"message\":\"" ++ Message ++ "\"\n  \"documentation_url\":\"http://docs.basho.com\"\n}".
   
   -ifdef(TEST).
   
  
positive.code: 	Input = "AWS4-HMAC-SHA256 Credential=RANDY_ACCESS_KEY/20140224/us-east-1/dynamodb/aws4_request, SignedHeaders=content-length;content-type;host;user-agent;x-amz-date;x-amz-target, Signature=81f71d83f35b3b2be9589f9ec0f5edca95b14d602f639b183e729d1fd1e3308c",
  	Actual = dynamo_user(Input),
  	Expected = <<"RANDY_ACCESS_KEY">>,
  	?assertEqual(Expected, Actual).
  
  dynamo_op_test() ->
  	TargetHeader = "DynamoDB_20120810.ListTables",
  	Actual = dynamo_op(TargetHeader),
  	Expected = {"ListTables", "DynamoDB_20120810"},
  	?assertEqual(Expected, Actual).
  
  -endif.
  
  
negative.code:     service_available/2,
      allowed_methods/2,
      content_types_accepted/2,
      content_types_provided/2,
      malformed_request/2,
      resource_exists/2,
      process_post/2,
  