Generally, you would use the Kernel#method method to get the Method object for the method in question and then you would use the Method#owner method to ask the Method object where it was defined.
So,
req.method(:basic_auth).owner
# => Net::HTTPHeader
should answer your question.
Except, in this particular case, that won't work because req is a Net::HTTP::Get object and Net::HTTP::Get overrides the method method to mean something completely different. In particular, it doesn't take an argument, thus the above code will actually raise an ArgumentError.
However, since Net::HTTP::Get inherits from Object and Object mixes in Kernel, it is legal to bind the Kernel#method method to an instance of Net::HTTP::Get:
Kernel.instance_method(:method).bind(req).(:basic_auth).owner
# => Net::HTTPHeader
So, there's your answer: the method is defined in Net::HTTPHeader.