Re-authenticating your client session
A client session can re-authenticate with the Diffusion™ server at any time in order to change its principal or session properties, or avoid session expiry.
JavaScript
await session.security.changePrincipal('principal', 'password');
console.log('Authenticated as admin');
.NET
bool result = await session.Security.ChangePrincipalAsync("control", Diffusion.Credentials.Password("password"));
Java and Android
final Session session = Diffusion.sessions().open("ws://localhost:8080");
final Security security = session.feature(Security.class);
security.reauthenticate(
"principal",
Diffusion.credentials().password("password"),
Collections.emptyMap());
C
static int principal_change_success(
SESSION_T *session,
void *context)
{
// principal has been successfully changed
return HANDLER_SUCCESS;
}
static int principal_change_failure(
SESSION_T *session,
void *context)
{
// principal change has failed
return HANDLER_SUCCESS;
}
void change_principal_for_session(
SESSION_T *session,
const char *new_principal,
const char *new_password)
{
CREDENTIALS_T *new_credentials = credentials_create_password(new_password);
CHANGE_PRINCIPAL_PARAMS_T params = {
.principal = new_principal,
.credentials = new_credentials,
.on_change_principal = principal_change_success,
.on_change_principal_failure = principal_change_failure};
change_principal(session, params);
credentials_free(new_credentials);
}
Apple
// create a credentials object encapsulating a string password
let credentials = PTDiffusionCredentials(password: "password")
// use the security feature from your session
session.security.changePrincipal("principal",
credentials: credentials) { (error) in
// Check error is `nil`, then use session as required.
if (error != nil) {
print("Failed to change principal: %@", error!.localizedDescription)
return
}
}
When the principal associated with a session changes, the following happens:
- The $Principal session property is updated to contain the new principal.
- The roles associated with the old principal are removed from the session and those roles associated with the new principal are assigned to the session.
- Topic subscriptions are re-evaluated. The session is unsubscribed from any topic the new principal does not have permissions for, and will be subscribed to new topics that it now does have permissions for.