Проверка маркеров доступа завершается неудачно, если область действия graph.microsoft.com - PullRequest
0 голосов
/ 01 апреля 2020

Получен токен доступа от AAD, используя следующий URL-адрес https://login.microsoftonline.com/gdfdddddd-87dd-497c-b894-xxxxxx/oauth2/v2.0/token

grant_type: client_credentials

client_id: xxxxx-1ff5-4615-8d71-гггггг

client_secret: [7aCw] fdsfsfsfds.AC61Fg: cm33

область действия: https://vault.azure.net/.default

Подтверждено выше полученного токена, используя приведенный ниже код вручную, и он отлично работает

 IConfigurationManager<OpenIdConnectConfiguration> configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>("https://login.microsoftonline.com/TestDomain310320.onmicrosoft.com/v2.0/.well-known/openid-configuration", new OpenIdConnectConfigurationRetriever());
            OpenIdConnectConfiguration openIdConfig = AsyncHelper.RunSync(async () => await configurationManager.GetConfigurationAsync(CancellationToken.None));

            TokenValidationParameters validationParameters =
                new TokenValidationParameters
                {
                    ValidIssuer = "https://sts.windows.net/a3d2bff3-87dd-497c-b894-f63befdd7496/",
                    ValidAudiences = new[] { "https://vault.azure.net" },
                    IssuerSigningKeys = openIdConfig.SigningKeys
                };

            SecurityToken validatedToken;
            JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
            var user = handler.ValidateToken(token, validationParameters, out validatedToken);

Измененный параметр Область действия: https://graph.microsoft.com/.default & успешно получил токен AAD, но проверка токена с использованием приведенного выше кода завершается неудачно с сообщением об ошибке "IDX10511: Ошибка проверки подписи. Попытка ключей: '[PII is hidden]'." Проверенное приложение AAD с указанным выше идентификатором клиента имеет «user.read/user.read.basicall разрешения». Почему проверка токена не проходит, если токены получены от AAD с Область действия: https://graph.microsoft.com/.default

Наблюдение:

Полученный токен с область действия: https://vault.azure.net/.default

     {
       "typ": "JWT",
      "alg": "RS256",
       "x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU",
       "kid": "YMELHT0gvb0mxoSDoYfomjqfjYU"
      }

Пока токен получен с Область действия: https://graph.microsoft.com/.default имеет дополнительное nonce свойство, чтобы избежать атаки воспроизведения, является ли это причиной ошибки проверки токена?

   {
     "type": "JWT",
    "nonce": "wCXLm9rF5Nma2S7OswU44uAVRpVbM_20WrWJkqbWe6Y",
    "alg": "RS256",
   "x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU",
   "kid": "YMELHT0gvb0mxoSDoYfomjqfjYU"
 }

пожалуйста, предложите.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Вы не должны просматривать или проверять токены, которые не были выпущены для вашего собственного Apis. Предполагаемый получатель, KeyVault и MS Graph выполнят необходимую проверку самостоятельно. Эти токены доступа следует рассматривать как непрозрачные двоичные объекты , которые вы вводите в заголовок Authorization при вызовах этих Apis.

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

Почему вы проверяете токены? Если вы в качестве доказательства аутентификации читаете проверенные токены Apis, которые не принадлежат вам, в ваших приложениях, то вы настраиваете себя на неудачу. Кроме того, это проблема безопасности, так как любое приложение в мире, которое может получить токен доступа для KeyVault или граф MS, может передать его вашему Apis и скомпрометировать его.

Вот обсуждение для справки - Невозможно проверить подпись , # 609

0 голосов
/ 01 апреля 2020

Да, ошибка была вызвана полем nonce в заголовке JWT.

Насколько я знаю, если мы запросим токен доступа для графа api, токен JWT будет содержать поле nonce. И тогда мы не сможем проверить его на нашем бэкэнде (из соображений безопасности Microsoft не позволяет нам выполнять эту операцию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...