Я заметил, что при запросе токена доступа из Приложения A с использованием потока учетных данных клиента (с сертификатом) выдается токен доступа без необходимости явной установки разрешений для доступа к Приложению B.
Да, это может быть немного удивительно, и я не уверен, почему это так.
Что вам нужно сделать, это определить разрешения приложения для API, а затем назначить его на клиенте.Затем необходимо проверить, имеет ли вызывающий объект необходимые разрешения приложения в токене.
У меня есть статья на эту тему: Определение областей разрешений и ролей, предлагаемых приложением в Azure AD .
Чтобы определить разрешение приложения для API, вам нужно отредактировать его манифест в Azure AD и добавить роль приложения с типом приложения-члена, например:
{
"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"
}
]
}
IIRCВы должны сгенерировать GUID для идентификатора.После определения этого разрешения в API перейдите в клиентское приложение и добавьте разрешение приложения в поле «Необходимые разрешения».Затем вы должны нажать Предоставить разрешения для предоставления разрешения приложению.
Теперь, когда клиент получает токен с учетными данными клиента, токен будет содержать:
{
"roles": [
"Todo.Read.All"
]
}
Так что вам придетсяпроверьте, что это присутствует.