在收到访问令牌(引用访问令牌)后,我的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]开始解析Basic Authentication的秘密 2016-08-24 13:33:39.505 -04:00 [调试] Parser发现秘密:“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 [警告]范围未经授权调用内省端点。则中止。
看起来我们正在使用传递给instropection端点的客户端应用程序ID来搜索客户端应用程序请求的范围。 问题:
他是对的吗? Id3可以记住客户端要求的范围吗? 我可以使用api ClientId调用instrospection endpint吗? - 我不想使用请求引用令牌的客户端应用程序的客户端ID。
代码如下:
var scope =(等待_scopes.FindScopesAsync(new [] {parsedSecret.Id}))。FirstOrDefault();
答案 0 :(得分:0)
ntrospection端点用于验证令牌而不是获取Jwt。要调用Introspection终点,您需要在身份验证请求中传递“Scope”和“Scope secret”,而不是客户端ID。 如果您将参考令牌发送到具有有效范围名称和秘密的instrospection端点,您将在响应中获得声明。
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);
}