@@ -52,35 +52,41 @@ func ReadKey(location string, hc *http.Client) (jose.JSONWebKey, error) {
5252 return keys .Keys [0 ], nil
5353}
5454
55- type SignerProvider func () (jose.Signer , error )
55+ type SignerProvider func () (jose.Signer , interface {}, error )
5656
5757func JWKSigner (clientConfig ClientConfig , hc * http.Client ) SignerProvider {
58- return func () (signer jose.Signer , err error ) {
58+ return func () (signer jose.Signer , _ interface {}, err error ) {
5959 var key jose.JSONWebKey
6060
6161 if clientConfig .SigningKey == "" {
62- return nil , errors .New ("no signing key path" )
62+ return nil , nil , errors .New ("no signing key path" )
6363 }
6464
6565 if key , err = ReadKey (clientConfig .SigningKey , hc ); err != nil {
66- return nil , errors .Wrapf (err , "failed to read signing key from %s" , clientConfig .SigningKey )
66+ return nil , nil , errors .Wrapf (err , "failed to read signing key from %s" , clientConfig .SigningKey )
6767 }
6868
69- return jose .NewSigner (jose.SigningKey {
69+ if signer , err = jose .NewSigner (jose.SigningKey {
7070 Algorithm : jose .SignatureAlgorithm (key .Algorithm ),
7171 Key : key .Key ,
7272 }, & jose.SignerOptions {
7373 ExtraHeaders : map [jose.HeaderKey ]interface {}{"kid" : key .KeyID },
74- })
74+ }); err != nil {
75+ return nil , nil , errors .Wrapf (err , "failed to create a signer" )
76+ }
77+
78+ return signer , key .Key , nil
7579 }
7680}
7781
7882func SecretSigner (secret []byte ) SignerProvider {
79- return func () (jose.Signer , error ) {
80- return jose .NewSigner (jose.SigningKey {
83+ return func () (jose.Signer , interface {}, error ) {
84+ signer , err := jose .NewSigner (jose.SigningKey {
8185 Algorithm : jose .HS256 ,
8286 Key : secret ,
8387 }, nil )
88+
89+ return signer , secret , err
8490 }
8591}
8692
@@ -123,30 +129,33 @@ func ClientAssertionClaims(serverConfig ServerConfig, clientConfig ClientConfig)
123129 }
124130}
125131
126- func SignJWT (claimsProvider ClaimsProvider , signerProvider SignerProvider ) (string , error ) {
132+ func SignJWT (claimsProvider ClaimsProvider , signerProvider SignerProvider ) (jwt string , key interface {}, err error ) {
127133 var (
128134 signer jose.Signer
129135 claims map [string ]interface {}
130136 jws * jose.JSONWebSignature
131137 bs []byte
132- err error
133138 )
134139
135- if signer , err = signerProvider (); err != nil {
136- return "" , errors .Wrapf (err , "failed to create signer" )
140+ if signer , key , err = signerProvider (); err != nil {
141+ return "" , nil , errors .Wrapf (err , "failed to create signer" )
137142 }
138143
139144 if claims , err = claimsProvider (); err != nil {
140- return "" , errors .Wrapf (err , "failed to build claims" )
145+ return "" , nil , errors .Wrapf (err , "failed to build claims" )
141146 }
142147
143148 if bs , err = json .Marshal (claims ); err != nil {
144- return "" , errors .Wrapf (err , "failed to serialize claims" )
149+ return "" , nil , errors .Wrapf (err , "failed to serialize claims" )
145150 }
146151
147152 if jws , err = signer .Sign (bs ); err != nil {
148- return "" , errors .Wrapf (err , "failed to sign jwt" )
153+ return "" , nil , errors .Wrapf (err , "failed to sign jwt" )
154+ }
155+
156+ if jwt , err = jws .CompactSerialize (); err != nil {
157+ return "" , nil , err
149158 }
150159
151- return jws . CompactSerialize ()
160+ return jwt , key , nil
152161}
0 commit comments