2016-08-25 8 views
1

アクセストークン(参照アクセストークン)を受け取った後、apiミドルウェアがinstropectionエンドポイントを呼び出してjwtトークンを取得します。残念ですが、私はjsonの応答にunauthortizeというエラーメッセージが表示されています。IdentityServer3 - 参照トークンを使用する場合のScopeSecretValidator

2016年8月24日13:33:39.505 -04:00 [デバッグ]スコープ検証 2016年8月24日13スタート:33:39.505 -04:00 [デバッグ] 2016-基本認証は秘密解析を開始08-24 13:33:39.505 -04:00 [デバッグ]パーザが秘密を見つけました: "BasicAuthenticationSecretParser" 2016-08-24 13:33:39.505 -04:00 [情報]シークレットIDが見つかりました: "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を使用して附属書エンドポイントを呼び出すことはできますか? - 参照トークンを要求したクライアントアプリケーションのクライアントIDを使用したくありません。ベロー

コード:

VAR範囲=(_scopes.FindScopesAsyncを待つ(新しい[] {parsedSecret.Id}))FirstOrDefault();

答えて

0

ntrospectionエンドポイントはトークンの検証用であり、Jwtを取得しません。イントロスペクションのエンドポイントを呼び出すには、クライアントIDではなく、認証の要求で「Scope」と「Scope secret」を渡す必要があります。 有効なスコープ名とシークレットを持つ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); 
      } 
関連する問題