Skip to content

Commit fbb0afc

Browse files
committed
Shorten refresh token expiry for enforced SSO users
Refresh token lifetime is now 2 days instead of 30 for users in workspaces with enforced SSO. This change applies to both standard and SAML SSO flows to improve security by requiring more frequent re-authentication.
1 parent c384e71 commit fbb0afc

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

src/models/user.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,15 @@ export default class UserModel extends AbstractModel<Omit<UserDBScheme, '_id'>>
302302

303303
/**
304304
* Generates JWT
305+
*
306+
* @param isSsoEnforced - if true, use shorter token lifetime (2 days instead of 30)
305307
*/
306-
public async generateTokensPair(): Promise<TokensPair> {
308+
public async generateTokensPair(isSsoEnforced = false): Promise<TokensPair> {
309+
/**
310+
* Use shorter refresh token expiry for SSO users to enforce re-authentication
311+
*/
312+
const refreshTokenExpiry = isSsoEnforced ? '2d' : '30d';
313+
307314
const accessToken = await jwt.sign(
308315
{
309316
userId: this._id,
@@ -317,7 +324,7 @@ export default class UserModel extends AbstractModel<Omit<UserDBScheme, '_id'>>
317324
userId: this._id,
318325
},
319326
process.env.JWT_SECRET_REFRESH_TOKEN as Secret,
320-
{ expiresIn: '30d' }
327+
{ expiresIn: refreshTokenExpiry }
321328
);
322329

323330
return {

src/resolvers/user.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,15 @@ export default {
143143
throw new ApolloError('There is no users with that id');
144144
}
145145

146-
return user.generateTokensPair();
146+
/**
147+
* Check if user is member of any workspace with enforced SSO
148+
* to use shorter token lifetime
149+
*/
150+
const workspacesIds = await user.getWorkspacesIds([]);
151+
const workspaces = await factories.workspacesFactory.findManyByIds(workspacesIds);
152+
const hasEnforcedSso = workspaces.some(w => w.sso?.enabled && w.sso?.enforced);
153+
154+
return user.generateTokensPair(hasEnforcedSso);
147155
},
148156

149157
/**

src/sso/saml/controller.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,8 +287,9 @@ export default class SamlController {
287287

288288
/**
289289
* 5. Create Hawk session
290+
* Use shorter token lifetime for enforced SSO workspaces
290291
*/
291-
const tokens = await user.generateTokensPair();
292+
const tokens = await user.generateTokensPair(workspace.sso?.enforced || false);
292293

293294
/**
294295
* 6. Redirect to Garage with tokens

0 commit comments

Comments
 (0)