Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
применяется к: арендаторы рабочей силы
внешние клиенты (подробнее)
Управление доступом на основе ролей (RBAC) — это механизм принудительной авторизации в приложениях. Внешний идентификатор Microsoft Entra позволяет определять роли приложений для приложения и назначать эти роли пользователям и группам. Роли, назначенные пользователю или группе, определяют уровень доступа к ресурсам и операциям в приложении. Когда External ID выдает маркер безопасности для проверенного пользователя, он содержит имена ролей, которые вы назначили пользователю или группе в утверждении ролей маркера безопасности.
Вы также можете настроить внешний клиент для возврата членства в группах пользователя. Затем разработчики могут использовать группы безопасности для реализации RBAC в своих приложениях, где членство пользователя в определенных группах интерпретируется как его ролевая принадлежность.
После назначения пользователям и группам ролей утверждение roles добавляется в маркер безопасности. Однако для включения утверждения о членстве групп в токены безопасности требуется дополнительная конфигурация во внешнем арендаторе.
В этой статье вы узнаете, как получать роли пользователей или членство в группах, или и то и другое в виде утверждений в маркере безопасности для веб-приложения 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;
Значение, на которое претендует группа, — это objectId группы . Если пользователь является членом нескольких групп, строка 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
в ID токене. Для реализации этой защиты в приложении можно создавать механизм защиты с помощью пользовательского промежуточного программного обеспечения.
В приложении-службе (приложение API) можно также защитить конечные точки API. После проверки маркера доступа, отправленного клиентским приложением, можно проверить наличие утверждений о ролях или группах в полезной нагрузке маркера доступа.
Можно ли использовать роли или группы приложений?
В этой статье вы узнали, что для реализации RBAC в приложении можно использовать роли приложения или группы. Предпочтительный подход — использовать роли приложения, так как он обеспечивает более детализированный контроль при управлении доступом и разрешениями на уровне приложения. Дополнительные сведения о том, как выбрать подход, см. в разделе Выбор подхода.
Дальнейшие действия
- Дополнительные сведения о настройке групповых утверждений и ролей приложений в токенах.