From 3215b88eaeb87634cdfb545758ee4a46ce3797a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=83=E7=9D=80=E5=9C=9F=E8=B1=86=E5=9D=90=E5=9C=B0?= =?UTF-8?q?=E9=93=81?= Date: Wed, 1 Nov 2023 17:58:17 +0800 Subject: [PATCH] fix: ADFS GetToken() and GetUserInfo() bug (#2468) * fix adfs bug * Update adfs.go --------- Co-authored-by: Gucheng <85475922+nomeguy@users.noreply.github.com> --- idp/adfs.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/idp/adfs.go b/idp/adfs.go index e1ec92ba..77328e09 100644 --- a/idp/adfs.go +++ b/idp/adfs.go @@ -19,7 +19,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "net/url" "time" @@ -84,6 +83,7 @@ func (idp *AdfsIdProvider) GetToken(code string) (*oauth2.Token, error) { payload.Set("code", code) payload.Set("grant_type", "authorization_code") payload.Set("client_id", idp.Config.ClientID) + payload.Set("client_secret", idp.Config.ClientSecret) payload.Set("redirect_uri", idp.Config.RedirectURL) resp, err := idp.Client.PostForm(idp.Config.Endpoint.TokenURL, payload) if err != nil { @@ -118,11 +118,25 @@ func (idp *AdfsIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error) { if err != nil { return nil, err } - body, err := ioutil.ReadAll(resp.Body) - keyset, err := jwk.ParseKey(body) + body, err := io.ReadAll(resp.Body) + var respKeys struct { + Keys []interface{} `json:"keys"` + } + + if err := json.Unmarshal(body, &respKeys); err != nil { + return nil, err + } + + respKey, err := json.Marshal(&(respKeys.Keys[0])) if err != nil { return nil, err } + + keyset, err := jwk.ParseKey(respKey) + if err != nil { + return nil, err + } + tokenSrc := []byte(token.AccessToken) publicKey, _ := keyset.PublicKey() idToken, _ := jwt.Parse(tokenSrc, jwt.WithVerify(jwa.RS256, publicKey))