Я использую Go клиент для получения токена от Oracle Access Manager (OAM). Для OAM требуется специальный заголовок в запросе токена, который я добавил с помощью следующего кода. Заголовок не должен добавляться к запросам, сделанным с использованием извлеченного токена,
Однако мое решение выглядит немного хакерским. Мне интересно, есть ли лучший подход.
package main
import (
"bytes"
"golang.org/x/net/context"
"golang.org/x/oauth2"
"golang.org/x/oauth2/clientcredentials"
"net/http"
"net/http/httputil"
)
type transport struct{}
var tokenPath = "/token"
func (t *transport) RoundTrip(req *http.Request) (*http.Response, error) {
// Modify the request here.
if req.URL.Path == tokenPath {
req.Header.Add("X-OAUTH-IDENTITY-DOMAIN-NAME", "DomainName")
}
reqBytes, err := httputil.DumpRequestOut(req, true)
if err != nil {
println(err)
}
println(string(reqBytes))
println()
response, e := http.DefaultTransport.RoundTrip(req)
respBytes, _ := httputil.DumpResponse(response, true)
println(string(respBytes))
println()
return response, e
}
func main(){
hc := &http.Client{Transport: &transport{}}
ctx := context.WithValue(context.Background(), oauth2.HTTPClient, hc)
config := clientcredentials.Config{
ClientID: "user",
ClientSecret: "secret",
TokenURL: "http://localhost:8080" + tokenPath,
AuthStyle: oauth2.AuthStyleInHeader,
Scopes: []string{"openid"},
}
client := config.Client(ctx)
b := []byte(`{"Payload": {"Date": {"patientID": "1234","serviceDate": "2019-07-31T00:00:00",}}}`)
reader := bytes.NewBuffer(b)
resp, err := client.Post("http://localhost:8080/IsEligible", "application/json", reader )
if err != nil{
panic(err)
}
// do something with resp
print(resp)
}