IdentityServer3 - ScopeSecretValidator при использовании ссылочного токена

После получения токена доступа (ссылочного токена доступа) мое промежуточное программное обеспечение api вызывает конечную точку instropection, чтобы получить токен jwt. К сожалению, я получаю ответ json с сообщением об ошибке unauthortize.

2016-08-24 13: 33: 39.505 -04: 00 [Debug] Начать проверку области 2016-08-24 13: 33: 39.505 -04: 00 [Debug] Начать синтаксический анализ секрета базовой аутентификации 2016-08-24 13:33 : 39.505 -04: 00 [Debug] Парсер обнаружил секрет: "BasicAuthenticationSecretParser" 2016-08-24 13: 33: 39.505 -04: 00 [Информация] Секретный идентификатор найден: "webapp123.hybric.flow" 2016-08-24 13 : 33: 39.507 -04: 00 [Информация] Область с таким именем не найдена. прерывание 2016-08-24 13: 33: 39.507 -04: 00 [Предупреждение] Область не авторизована для вызова конечной точки самоанализа. прерывание.

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

Он прав? Может ли Id3 запомнить объемы, запрошенные клиентом? Могу ли я вызвать конечную точку инстроспекции с помощью API ClientId? - Я не хочу использовать идентификатор клиента клиентского приложения, которое запросило эталонный токен.

Код ниже:

var scope = (ждать _scopes.FindScopesAsync (новый [] {parsedSecret.Id})). FirstOrDefault ();


person Yusbel Garcia    schedule 25.08.2016    source источник


Ответы (1)


Конечная точка ntrospection предназначена для проверки токена, а не для получения Jwt. Чтобы вызвать конечную точку интроспекции, вам необходимо передать в запросе на аутентификацию «Scope» и «Scope secret», а не идентификатор клиента. Если вы отправите эталонный токен в конечную точку инстроспекции с допустимым именем области и секретом, вы получите утверждения в ответе.

 public async Task ValidateValidReferenceTokenUsingIntrospectionEndPoint()
            {
                var tokenResponse = await GetTokenResponseForClientCredentialsFlow(IdsModel.AccessTokenType.Reference);

                var introspectionClient = new IntrospectionClient(
                   IntrospectionEndpoint,
                   "Api1",  // scope name, scope secret
                   "Api1Secret");

                var response = await introspectionClient.SendAsync(new IntrospectionRequest
                {
                    Token = tokenResponse.AccessToken
                });

                var jsonResult = JsonConvert.DeserializeObject<Dictionary<string, object>>(response.Raw);

                response.IsActive.Should().Be(true);
                response.IsError.Should().Be(false);


                jsonResult.Should().Contain("iss", ValidIssuer);
                jsonResult.Should().Contain("aud", ValidAudience);
                jsonResult.Should().Contain("client_id", "referenceTokenClient");
jsonResult.Should().Contain("client_claim1", "claim1value");
                jsonResult.Should().Contain("active", true);
            }
person Shetty    schedule 26.08.2016