@@ -189,7 +189,7 @@ func main() {
189189 * clientID = uaaConfig .UAAOAuthClient
190190 * clientSecret = uaaConfig .UAAOAuthClientSecret
191191 }
192- if * issEndPoint == "" {
192+ if * issEndPoint == "" && * urlEndPoint == "" {
193193 * issEndPoint = os .Getenv ("OPENID_ISSUER" )
194194 }
195195 if * clientID == "" {
@@ -207,7 +207,7 @@ func main() {
207207 if * tokenFormatParameter == "" {
208208 * tokenFormatParameter = os .Getenv ("OPENID_FORMAT" )
209209 }
210- if * issEndPoint == "" {
210+ if * issEndPoint == "" && * urlEndPoint == "" {
211211 log .Fatal ("issuer is required to run this command" )
212212 } else if * clientID == "" {
213213 log .Fatal ("client_id is required to run this command" )
@@ -430,7 +430,7 @@ func main() {
430430 requestMap .Set ("refresh_expiry" , * refreshExpiry )
431431 }
432432 if * command == "client_credentials" {
433- client .HandleClientCredential (requestMap , * bearerToken , * provider , * tlsClient , verbose )
433+ client .HandleClientCredential (requestMap , * bearerToken , claims . TokenEndPoint , * tlsClient , verbose )
434434 } else if * command == "password" {
435435 if * userName == "" {
436436 log .Fatal ("username is required to run this command" )
@@ -440,7 +440,7 @@ func main() {
440440 log .Fatal ("password is required to run this command" )
441441 }
442442 requestMap .Set ("password" , * userPassword )
443- var responseToken = client .HandlePasswordGrant (requestMap , * provider , * tlsClient , verbose )
443+ var responseToken = client .HandlePasswordGrant (requestMap , claims . TokenEndPoint , * tlsClient , verbose )
444444 if * doCfCall {
445445 cf .WriteUaaConfig (* issEndPoint , responseToken )
446446 }
@@ -453,7 +453,7 @@ func main() {
453453 refreshToken = * assertionToken
454454 }
455455 var bSilent = (* resourceSso || * doRefresh ) && ! verbose
456- var newRefresh = client .HandleRefreshFlow (verbose , bSilent , * clientID , * appTid , * clientSecret , refreshToken , * refreshExpiry , privateKeyJwt , * tlsClient , * provider )
456+ var newRefresh = client .HandleRefreshFlow (verbose , bSilent , * clientID , * appTid , * clientSecret , refreshToken , * refreshExpiry , privateKeyJwt , * tlsClient , claims . TokenEndPoint )
457457 if verbose {
458458 log .Println ("Old refresh token: " + refreshToken )
459459 log .Println ("New refresh token: " + newRefresh .RefreshToken )
@@ -501,6 +501,12 @@ func main() {
501501 }
502502 }
503503 } else if * command == "jwt-bearer" {
504+ if * resourceSso {
505+ requestMap .Del ("resource" )
506+ requestMap .Del ("requested_token_type" )
507+ requestMap .Set ("refresh_expiry" , "0" )
508+ requestMap .Set ("token_format" , "opaque" )
509+ }
504510 requestMap .Set ("grant_type" , "urn:ietf:params:oauth:grant-type:jwt-bearer" )
505511 if * assertionToken == "" {
506512 log .Fatal ("assertion parameter not set. Needed to pass it for JWT bearer" )
@@ -510,6 +516,19 @@ func main() {
510516 if * doCfCall {
511517 fmt .Println (jwtBearerTokenResponse .AccessToken )
512518 cf .WriteUaaConfig (* issEndPoint , jwtBearerTokenResponse )
519+ } else if * resourceSso && jwtBearerTokenResponse .AccessToken != "" {
520+ requestMap .Del ("assertion" )
521+ requestMap .Set ("grant_type" , "urn:ietf:params:oauth:grant-type:token-exchange" )
522+ requestMap .Set ("resource" , "urn:sap:identity:sso" )
523+ requestMap .Set ("subject_token_type" , "urn:ietf:params:oauth:token-type:access_token" )
524+ requestMap .Set ("requested_token_type" , "urn:ietf:params:oauth:token-type:access_token" )
525+ requestMap .Set ("subject_token" , jwtBearerTokenResponse .AccessToken )
526+ var exchangedTokenResponse = client .HandleTokenExchangeGrant (requestMap , claims .TokenEndPoint , * tlsClient , verbose )
527+ if exchangedTokenResponse .AccessToken != "" {
528+ fmt .Println (exchangedTokenResponse .AccessToken )
529+ } else {
530+ fmt .Println (exchangedTokenResponse .IdToken )
531+ }
513532 } else if jwtBearerTokenResponse .IdToken != "" {
514533 fmt .Println (jwtBearerTokenResponse .IdToken )
515534 } else {
@@ -588,7 +607,7 @@ func main() {
588607 log .Println ("No refresh token received." )
589608 return
590609 }
591- var newRefresh = client .HandleRefreshFlow (verbose , bSilent , * clientID , * appTid , * clientSecret , refreshToken , * refreshExpiry , privateKeyJwt , * tlsClient , * provider )
610+ var newRefresh = client .HandleRefreshFlow (verbose , bSilent , * clientID , * appTid , * clientSecret , refreshToken , * refreshExpiry , privateKeyJwt , * tlsClient , claims . TokenEndPoint )
592611 if verbose {
593612 log .Println ("Old refresh token: " + refreshToken )
594613 log .Println ("New refresh token: " + newRefresh .RefreshToken )
0 commit comments