OAuth2 Bearer Token with Customer HttpClient
shanhui1 opened this issue · 1 comments
shanhui1 commented
For our use case, we need to pass in our custom HttpClient and make request with a different OAuth2 Bearer Token. We can't use the oauth2 lib as suggested. Anyway to get access to the req.headers before sending mutation queries?
I have a custom HttpClient such as this:
type AddHeaderTransport struct {
T http.RoundTripper
}
func (adt *AddHeaderTransport) RoundTrip(req *http.Request) (*http.Response, error) {
// TODO: bearer_token needs to be changed in each request cycle as there are many accounts that need to be called
req.Header.Add("Authorization", "Bearer token_here")
req.Header.Add("User-Agent", "go")
return adt.T.RoundTrip(req)
}
func NewAddHeaderTransport(T http.RoundTripper) *AddHeaderTransport {
if T == nil {
T = http.DefaultTransport
}
return &AddHeaderTransport{T}
}
func NewClientWithAccessToken(timeout, tcpConnTimeout, tlsConnTimeout time.Duration) *http.Client {
transport := &http.Transport{
DialContext: (&net.Dialer{
Timeout: tcpConnTimeout,
}).DialContext,
TLSHandshakeTimeout: tlsConnTimeout,
}
cc := http.Client{
Transport: NewAddHeaderTransport(transport),
Timeout: timeout,
}
return &cc
}
func DefaultClientWithAccessToken() *http.Client {
return NewClientWithAccessToken(
DEFAULT_TIMEOUT_MS*time.Millisecond,
DEFAULT_CONNECTION_TIMEOUT_MS*time.Millisecond,
DEFAULT_CONNECTION_TIMEOUT_MS*time.Millisecond,
)
}
onurkose commented
I was looking for a solution to make self signed certificates work for local development. But I believe this will solve your problem too.
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
sslcli := &http.Client{Transport: tr}
ctx := context.TODO()
ctx = context.WithValue(ctx, oauth2.HTTPClient, sslcli)
src := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: "...put your token without the Bearer prefix here..."},
)