Skip to content

Commit c0f372d

Browse files
committed
fix: fix possible errors when decoding base64 token payloads
Some token payloads containing '-' or '_' characters were causing errors when provided to the atob function'
1 parent cdfe0a7 commit c0f372d

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/AuthMSAL/AuthMSAL.js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,27 @@ function isAsync() {
199199
}
200200

201201
function _extractRolesFromAccessToken(accessToken) {
202-
let result = [];
203-
if (accessToken) {
204-
const decodedToken = JSON.parse(atob(accessToken.split('.')[1]));
205-
if (decodedToken?.roles) {
206-
result = decodedToken?.roles;
207-
}
202+
if (!accessToken) {
203+
console.error("Can't extract user roles: access token is null or undefined");
204+
return [];
205+
}
206+
207+
const tokenPayload = accessToken.split('.')[1];
208+
if (!tokenPayload) {
209+
console.error("Can't extract user roles: access token is ill-formed");
210+
console.error(accessToken);
211+
return [];
212+
}
213+
214+
try {
215+
const decoded = atob(tokenPayload.replace(/-/g, '+').replace(/_/g, '/'));
216+
const parsed = JSON.parse(decoded);
217+
return parsed?.roles ?? [];
218+
} catch (e) {
219+
console.error("Can't extract user roles: failed to decode and parse access token");
220+
console.error(accessToken);
221+
return [];
208222
}
209-
return result;
210223
}
211224

212225
async function isUserSignedIn() {

0 commit comments

Comments
 (0)