Skip to content

Commit 0bf1560

Browse files
Adding support for Native to Web SSO - Session Transfer (#536)
Co-authored-by: Kunal Dawar <[email protected]> Co-authored-by: Kunal Dawar <[email protected]>
1 parent 0465249 commit 0bf1560

File tree

5 files changed

+408
-0
lines changed

5 files changed

+408
-0
lines changed

management/client.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ type Client struct {
142142
DefaultOrganization *ClientDefaultOrganization `json:"default_organization,omitempty"`
143143

144144
TokenExchange *ClientTokenExchange `json:"token_exchange,omitempty"`
145+
146+
// Session Transfer settings for the client - Allows Native to Web SSO
147+
SessionTransfer *SessionTransfer `json:"session_transfer,omitempty"`
145148
}
146149

147150
// ClientTokenExchange allows configuration for token exchange.
@@ -370,6 +373,13 @@ type BackChannelLogoutInitiators struct {
370373
SelectedInitiators *[]string `json:"selected_initiators,omitempty"`
371374
}
372375

376+
// SessionTransfer Transfer defines the setting to allow Native to Web SSO session transfer.
377+
type SessionTransfer struct {
378+
CanCreateSessionTransferToken *bool `json:"can_create_session_transfer_token,omitempty"`
379+
AllowedAuthenticationMethods *[]string `json:"allowed_authentication_methods,omitempty"`
380+
EnforceDeviceBinding *string `json:"enforce_device_binding,omitempty"`
381+
}
382+
373383
// ClientAddons defines the `addons` settings for a Client.
374384
type ClientAddons struct {
375385
AWS *AWSClientAddon `json:"aws,omitempty"`

management/client_test.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,71 @@ func TestClient_CreateWithTokenExchange(t *testing.T) {
108108
})
109109
}
110110

111+
func TestClient_SessionTransfer(t *testing.T) {
112+
configureHTTPTestRecordings(t)
113+
114+
ctx := context.Background()
115+
116+
clientName := auth0.Stringf("Test Client SessionTransfer (%s)", time.Now().Format(time.StampMilli))
117+
expectedClient := &Client{
118+
Name: clientName,
119+
Description: auth0.String("This is a test client with Session Transfer."),
120+
SessionTransfer: &SessionTransfer{
121+
CanCreateSessionTransferToken: auth0.Bool(true),
122+
AllowedAuthenticationMethods: &[]string{"cookie", "query"},
123+
EnforceDeviceBinding: auth0.String("ip"),
124+
},
125+
}
126+
127+
// Create client
128+
require.NoError(t, api.Client.Create(ctx, expectedClient))
129+
require.NotEmpty(t, expectedClient.GetClientID())
130+
131+
t.Cleanup(func() {
132+
cleanupClient(t, expectedClient.GetClientID())
133+
})
134+
135+
// Verify creation
136+
created, err := api.Client.Read(ctx, expectedClient.GetClientID())
137+
require.NoError(t, err)
138+
require.NotNil(t, created.SessionTransfer)
139+
assert.Equal(t, expectedClient.GetSessionTransfer(), created.GetSessionTransfer())
140+
141+
// Update session transfer
142+
created.SessionTransfer = &SessionTransfer{
143+
CanCreateSessionTransferToken: auth0.Bool(false),
144+
AllowedAuthenticationMethods: &[]string{"cookie"},
145+
EnforceDeviceBinding: auth0.String("none"),
146+
}
147+
148+
// Strip fields not allowed on update
149+
created.ClientID = nil
150+
created.SigningKeys = nil
151+
if created.JWTConfiguration != nil {
152+
created.JWTConfiguration.SecretEncoded = nil
153+
}
154+
155+
require.NoError(t, api.Client.Update(ctx, expectedClient.GetClientID(), created))
156+
157+
// Verify update
158+
updated, err := api.Client.Read(ctx, expectedClient.GetClientID())
159+
require.NoError(t, err)
160+
require.NotNil(t, updated.SessionTransfer)
161+
assert.Equal(t, created.GetSessionTransfer(), updated.GetSessionTransfer())
162+
163+
// Remove session transfer via PATCH
164+
type clientPatch struct {
165+
SessionTransfer *SessionTransfer `json:"session_transfer"`
166+
}
167+
patch := &clientPatch{SessionTransfer: nil}
168+
require.NoError(t, api.Request(ctx, http.MethodPatch, api.URI("clients", expectedClient.GetClientID()), patch))
169+
170+
// Verify removal
171+
final, err := api.Client.Read(ctx, expectedClient.GetClientID())
172+
require.NoError(t, err)
173+
assert.Nil(t, final.GetSessionTransfer())
174+
}
175+
111176
func TestClient_CreateWithDefaultOrg(t *testing.T) {
112177
configureHTTPTestRecordings(t)
113178

management/management.gen.go

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

management/management.gen_test.go

Lines changed: 45 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)