В Azure AD вы можете использовать добавление ролей приложения в своем приложении, а затем назначать пользователей и группы ролям, чтобы после входа в систему роли cliam существовали в токенах:
https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps
Другой подход заключается в использовании Azure групп AD и групповых утверждений:
https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-fed-group-claims
Но если ваш Информация о ролях хранится в локальной базе данных, после входа пользователя с помощью AAD с MSAL в приложении angular вы можете запрашивать базу данных и получать роли пользователя по идентификатору пользователя, при выполнении вызовов API вы можете отправлять роли в теле запроса.
Если вы не хотите запрашивать роли в клиентском приложении, при отправке токена доступа в. net core web api, вы можете запросить базу данных, чтобы получить роли пользователя в OnTokenValidated
событии AddJwtBearer
:
services
.AddAuthentication(o =>
{
o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o =>
{
//Additional config snipped
o.Events = new JwtBearerEvents
{
OnTokenValidated = async ctx =>
{
//Get the calling app client id that came from the token produced by Azure AD
string clientId = ctx.Principal.FindFirstValue("appid");
//Get EF context
var db = ctx.HttpContext.RequestServices.GetRequiredService<AuthorizationDbContext>();
//Check if this app can read confidential items
bool canReadConfidentialItems = await db.Applications.AnyAsync(a => a.ClientId == clientId && a.ReadConfidentialItems);
if (canReadConfidentialItems)
{
//Add claim if yes
var claims = new List<Claim>
{
new Claim("ConfidentialAccess", "true")
};
var appIdentity = new ClaimsIdentity(claims);
ctx.Principal.AddIdentity(appIdentity);
}
}
};
});
Ссылка: https://joonasw.net/view/adding-custom-claims-aspnet-core-2
После этого вы можете передать роли обратно клиенту в теле запроса, но не можете изменить Azure AD токен для включения информации о ролях.
Если вы работаете совместно Чтобы узнать о безопасности передачи ролей в теле запроса, вы также можете использовать Identity Server 4 и добавить Azure AD в качестве внешнего провайдера входа в систему:
http://docs.identityserver.io/en/latest/