Использовать разрешения приложения:)
Вы можете определить два разрешения приложения в манифесте API X, как показано ниже (пример показывает одно, для ясности удалены другие свойства):
{
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "Read all todo items",
"id": "f8d39977-e31e-460b-b92c-9bef51d14f98",
"isEnabled": true,
"description": "Allow the application to read all todo items as itself.",
"value": "Todo.Read.All"
}
]
}
Установите value
на то, что имеет смысл для вас, оно будет включено в токен доступа.
Пример токена (с большинством удаленных претензий):
{
"appid": "28d6c0d7-6017-42f7-8cee-c27d80bb9709",
"roles": [
"Todo.Read.All"
]
}
Подробнее о них вы можете прочитать в моем блоге: https://joonasw.net/view/defining-permissions-and-roles-in-aad.
Затем вы переходите к обоим приложениям, использующим API X в AAD, и вам требуются оба разрешения для приложения в одном из них и только одно из разрешений в другом.
Не забудьте предоставить разрешения.
Затем вы можете добавить политики авторизации, которые требуют наличия заявки с типом "roles"
/ ClaimTypes.Role
(я забыл, какая она есть) и значением значения в разрешении приложения.
Пример определения политики:
services.AddAuthorization(o =>
{
o.AddPolicy("SpecialStuff", p => p.RequireClaim(ClaimTypes.Role, "SpecialStuff.Read"));
});
Затем вы указываете [Authorize("PolicyName")]
на контроллере или действии, для которого вы хотите получить разрешение.
Примечание: мне действительно нужно написать блог о том, как делать это в ASP.NET Core APIs.