Дифференцируйте сценарии, которые получают токен доступа, используя тип предоставления учетных данных клиента

В Microsoft EntraID у меня есть регистрация приложения, имеющая два секрета клиента.

Я хочу получить токен доступа из этой регистрации приложения, используя тип предоставления учетных данных клиента, используя два отдельных сценария Python (script1 и script2).

Проблема в том, что невозможно отличить, был ли токен JWT получен из скрипта1 или скрипта2. Для каждого сценария я использовал отдельный секрет клиента.

Чтобы получить токен доступа JWT, я использовал этот завиток и указал, что хочу использовать тип предоставления учетных данных клиента, и попробовал использовать его с разными client_secrets. Но JWT были одинаковыми и отличить их невозможно.

curl --location 'https://login.microsoftonline.com/5fdbbf9b-ae6b-4986-8349-46baf9cffc1a/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cookie: fpc=AsBGgX8tBlFBpcISkM-uVZHIlH0WAQAAANI0F94OAAAA' \
--data-urlencode 'client_id=4c670161-3e27-441f-b694-6538e755d94e' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_secret=xxxxxxxxxxxxxxxxxxxx' \
--data-urlencode 'scope=api://4c670161-3e27-441f-b694-6538e755d94e/.default'

Вопрос 1. Есть ли способ различать клиентов, использующих тип предоставления учетных данных клиента, когда они используют разные секреты?

Вопрос 2. Я неправильно использую этот тип гранта? Это тип разрешения, рекомендуемый для ситуации между машинами.

Я не думаю, что вы можете отличить клиента, использующего разные секреты.

wenbo 09.07.2024 10:13
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
1
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я согласен с @wenbo, вы не можете различать клиентов, которые используют тип предоставления учетных данных клиента на основе секретов.

  • Тип предоставления учетных данных клиента сам по себе не различает токены на основе секретов клиента.
  • Тип предоставления учетных данных клиента используется для получения токена доступа, который представляет само приложение, а не конкретного пользователя или клиента.
  • Маркер доступа, полученный с использованием типа предоставления учетных данных клиента, идентичен и использует тот же идентификатор приложения и секрет.

Сгенерированный токен доступа:

curl --location 'https://login.microsoftonline.com/TenantID/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cookie: fpc=xxx' \
--data-urlencode 'client_id=ClientID' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_secret=xxxxxxxxxxxxxxxxxxxx' \
--data-urlencode 'scope=api://xxx/.default'

Следовательно, вы можете различать токен доступа только на основе утверждений iss, appid, roles, aud, tid.

  • Вы можете использовать тип предоставления учетных данных клиента для сценариев, включающих межмашинную аутентификацию, когда приложение обращается к своим собственным ресурсам.

Другие вопросы по теме

Похожие вопросы