@ -1503,6 +1503,7 @@ func TestResolveAuthKey(t *testing.T) {
clientSecret string
clientID string
idToken string
audience string
oauthAvailable bool
wifAvailable bool
resolveViaOAuth func ( ctx context . Context , clientSecret string , tags [ ] string ) ( string , error )
@ -1550,6 +1551,23 @@ func TestResolveAuthKey(t *testing.T) {
wantAuthKey : "tskey-auth-via-wif" ,
wantErrContains : "" ,
} ,
{
name : "successful resolution via federated audience" ,
clientID : "client-id-123" ,
audience : "api.tailscale.com" ,
wifAvailable : true ,
resolveViaWIF : func ( ctx context . Context , baseURL , clientID , idToken , audience string , tags [ ] string ) ( string , error ) {
if clientID != "client-id-123" {
return "" , fmt . Errorf ( "unexpected client ID: %s" , clientID )
}
if audience != "api.tailscale.com" {
return "" , fmt . Errorf ( "unexpected ID token: %s" , idToken )
}
return "tskey-auth-via-wif" , nil
} ,
wantAuthKey : "tskey-auth-via-wif" ,
wantErrContains : "" ,
} ,
{
name : "failing resolution via federated ID token" ,
clientID : "client-id-123" ,
@ -1561,7 +1579,7 @@ func TestResolveAuthKey(t *testing.T) {
wantErrContains : "resolution failed" ,
} ,
{
name : "empty client ID ",
name : "empty client ID with ID token ",
clientID : "" ,
idToken : "id-token-456" ,
wifAvailable : true ,
@ -1570,6 +1588,16 @@ func TestResolveAuthKey(t *testing.T) {
} ,
wantErrContains : "empty" ,
} ,
{
name : "empty client ID with audience" ,
clientID : "" ,
audience : "api.tailscale.com" ,
wifAvailable : true ,
resolveViaWIF : func ( ctx context . Context , baseURL , clientID , idToken , audience string , tags [ ] string ) ( string , error ) {
return "" , fmt . Errorf ( "should not be called" )
} ,
wantErrContains : "empty" ,
} ,
{
name : "empty ID token" ,
clientID : "client-id-123" ,
@ -1580,6 +1608,17 @@ func TestResolveAuthKey(t *testing.T) {
} ,
wantErrContains : "empty" ,
} ,
{
name : "audience with ID token" ,
clientID : "client-id-123" ,
idToken : "id-token-456" ,
audience : "api.tailscale.com" ,
wifAvailable : true ,
resolveViaWIF : func ( ctx context . Context , baseURL , clientID , idToken , audience string , tags [ ] string ) ( string , error ) {
return "" , fmt . Errorf ( "should not be called" )
} ,
wantErrContains : "only one of ID token and audience" ,
} ,
{
name : "workload identity resolution skipped if resolution via OAuth token succeeds" ,
clientSecret : "tskey-client-secret-123" ,
@ -1665,6 +1704,7 @@ func TestResolveAuthKey(t *testing.T) {
ClientSecret : tt . clientSecret ,
ClientID : tt . clientID ,
IDToken : tt . idToken ,
Audience : tt . audience ,
ControlURL : "https://control.example.com" ,
}
s . shutdownCtx = context . Background ( )