Добавьте пользовательский заголовок в запрос токена OAuth - PullRequest
0 голосов
/ 17 января 2020

Я использую 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)
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...