Использование управления доступом на основе ролей в веб-приложении Node.js
Область применения: клиенты рабочей силы внешние клиенты (дополнительные сведения)
Управление доступом на основе ролей (RBAC) — это механизм принудительной авторизации в приложениях. Внешняя идентификация Microsoft Entra позволяет определять роли приложений для приложения и назначать эти роли пользователям и группам. Роли, назначенные пользователю или группе, определяют уровень доступа к ресурсам и операциям в приложении. Когда внешний идентификатор выдает маркер безопасности для прошедшего проверку подлинности пользователя, он содержит имена ролей, назначенных пользователю или группе в утверждении ролей маркера безопасности.
Вы также можете настроить внешний клиент для возврата членства в группах пользователя. Затем разработчики могут использовать группы безопасности для реализации RBAC в своих приложениях, где членства пользователя в определенных группах интерпретируются как членства в роли.
После назначения пользователям и группам ролей утверждение ролей создается в маркере безопасности. Однако для выдачи утверждения о членстве в группах в маркерах безопасности требуется дополнительная конфигурация в клиенте клиента.
В этой статье вы узнаете, как получать роли пользователей или членство в группах или как утверждения в маркере безопасности для веб-приложения Node.js.
Необходимые компоненты
Если вы этого не сделали, выполните действия, описанные в статье "Использование управления доступом на основе ролей для приложений ". В этой статье показано, как создать роли для приложения, как назначить пользователей и группы этим ролям, как добавить участников в группу и как добавить утверждение группы в маркер безопасности. Дополнительные сведения о маркерах идентификатора и маркерах доступа.
Если вы этого не сделали, выполните действия, описанные в разделе "Вход пользователей" в собственном веб-приложении Node.js
Получение утверждений групп и ролей в веб-приложении Node.js
После настройки клиента можно получить утверждения ролей и групп в клиентском приложении. Утверждения ролей и групп присутствуют в маркере идентификатора и маркере доступа, но клиентское приложение должно только проверка для этих утверждений в маркере идентификатора для реализации авторизации на стороне клиента. Приложение API также может получить эти утверждения при получении маркера доступа.
Вы проверка значение утверждения ролей, как показано в следующем примере фрагмента кода:
const msal = require('@azure/msal-node');
const { msalConfig, TENANT_SUBDOMAIN, REDIRECT_URI, POST_LOGOUT_REDIRECT_URI } = require('../authConfig');
...
class AuthProvider {
...
async handleRedirect(req, res, next) {
const authCodeRequest = {
...req.session.authCodeRequest,
code: req.body.code, // authZ code
codeVerifier: req.session.pkceCodes.verifier, // PKCE Code Verifier
};
try {
const msalInstance = this.getMsalInstance(this.config.msalConfig);
const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
let roles = tokenResponse.idTokenClaims.roles;
//Check roles
if (roles && roles.includes("Orders.Manager")) {
//This user can view the ID token claims page.
res.redirect('/id');
}
//User can only view the index page.
res.redirect('/');
} catch (error) {
next(error);
}
}
...
}
При назначении пользователя нескольким ролям roles
строка содержит все роли, разделенные запятой, например Orders.Manager,Store.Manager,...
. Убедитесь, что вы создаете приложение для обработки следующих условий:
roles
отсутствие утверждения в маркере- пользователь не был назначен какой-либо роли
- несколько значений в утверждении
roles
при назначении пользователю нескольких ролей
Вы также можете проверка значение утверждения групп, как показано в следующем примере фрагмента кода:
const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
let groups = tokenResponse.idTokenClaims.groups;
Значение утверждения групп — объектная идентификатор группы. Если пользователь является членом нескольких групп, groups
строка содержит все группы, разделенные запятой, например 7f0621bc-b758-44fa-a2c6-...,6b35e65d-f3c8-4c6e-9538-...
.
Примечание.
При назначении пользователем встроенных ролей Microsoft Entra или ролей каталога, эти роли отображаются в утверждениях группы маркера безопасности.
Обработка переполнения групп
Чтобы гарантировать, что размер маркера безопасности не превышает предел размера заголовка HTTP, внешний идентификатор ограничивает количество идентификаторов объектов, которые он включает в утверждение групп . Ограничение превышения составляет 150 для токенов SAML и 200 для токенов JWT. Это ограничение можно превысить, если пользователь принадлежит многим группам, и вы запрашиваете все группы.
Обнаружение превышения группы в исходном коде
Если вы не можете избежать превышения групп, необходимо обработать его в коде. При превышении превышения лимита превышения маркер не содержит утверждения групп . Вместо этого маркер содержит утверждение _claim_names , содержащее элемент группы массива. Таким образом, необходимо проверка существование _claim_names утверждения, чтобы сказать, что превышение произошло. В следующем фрагменте кода показано, как обнаружить переполнение групп:
const tokenResponse = await msalInstance.acquireTokenByCode(authCodeRequest, req.body);
if(tokenResponse.idTokenClaims.hasOwnProperty('_claim_names') && tokenResponse.idTokenClaims['_claim_names'].hasOwnProperty('groups')) {
//overage has occurred
}
Инструкции по настройке утверждений групп и ролей приложений в статье маркеров показано, как запрашивать полный список групп при превышении групп.
Использование групп и ролей в веб-приложении Node.js
В клиентском приложении можно проверить, имеет ли пользователь вошедшего пользователя необходимые роли для доступа к защищенному маршруту или вызова конечной точки API. Это можно сделать, проверка roles
утверждения в маркере идентификатора. Для реализации этой защиты в приложении можно создавать охранники с помощью пользовательского ПО промежуточного слоя.
В приложении-службе (приложение API) можно также защитить конечные точки API. После проверки маркера доступа, отправленного клиентским приложением, можно проверка для ролей или групп утверждений в утверждениях полезных данных маркера доступа.
Можно ли использовать роли или группы приложений?
В этой статье вы узнали, что вы можете использовать роли приложения или группы для реализации RBAC в приложении. Предпочтительный подход — использовать роли приложения, так как он обеспечивает более детализированный контроль при управлении доступом и разрешениями на уровне приложения. Дополнительные сведения см. в разделе Выбор подхода.
Следующие шаги
- Дополнительные сведения о настройке утверждений группы и ролей приложения в токенах.