2016-11-16 28 views
5

いくつかのサービスを保護するためにIdentityServer4のプロトタイプを作成していますが、これらのサービスは将来的にはASP.NETコアのOWINミドルウェアイディオムを使用するように移行されない可能性があります。したがって、IdentityServerのよく知られたJWKSエンドポイントを提供するだけで、JWTの検証を自動化する多くのミドルウェアヘルパーを活用することはできません。JwtSecurityTokenHandlerとJWKSエンドポイントを使用してJWTを検証するにはどうすればよいですか?

この動作を再構築できればいいと思いますが、できるだけMicrosoftのJwtSecurityTokenHandlerの実装を利用したいと思います。しかし、IdentityServerのディスカバリ・エンドポイントで提供されたJsonWebKeySetJsonWebKeyのタイプを使用してキーを抽出し、検証を実行する方法を理解することはできません。

JwtSecurityTokenHandlerは、TokenValidationParametersを使用してJWTを検証します。これらのパラメータには、検証を実行するために1つ以上のSecurityKeyオブジェクトのインスタンスが必要です。検証が発生する可能性がありますように、私はJsonWebKeySetからIEnumerable<SecurityKey>に必要な変換を実行するにはどうすればよい

ClaimsPrincipal ValidateJwt(string token, IdentityModel.Client.DiscoveryResponse discovery) 
{ 
    JwtSecurityToken jwt = new JwtSecurityToken(token); 

    TokenValidationParameters validationParameters = new TokenValidationParameters 
    { 
     ValidateAudience = true, 
     ValidateIssuer = true, 
     RequireSignedTokens = true, 
     ValidIssuer = "expected-issuer", 
     ValidAudience = "expected-audience", 
     IssuerSigningKeys = discovery.KeySet.Keys /* not quite */ 
    }; 

    JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler(); 
    SecurityToken validatedToken; 
    return handler.ValidateToken(jwt, validationParameters, out validatedToken); 
} 

?上記のDiscoveryResponseデータを使用して動作する別の方法(OWINミドルウェアを除く)がありますか?

(残念ながら、System.IdentityModel.Tokens.Jwtのドキュメントが最新のものではありません。)

答えて

関連する問題