2016-07-23 17 views
5

ASP.NETアイデンティティ3.0のCore 5、私はWebページとapisの両方を使用しています。 OpenIddictを使用してJWTトークンを発行し、認証しています。JWTトークンで承認

X509Certificate2 c = new X509Certificate2(@"tokensign.p12", "MyCertificatePassword"); 

    services.AddOpenIddict<WebUser, IdentityRole<int>, WebDbContext, int>() 
     .EnableTokenEndpoint("/api/customauth/login") 
     .AllowPasswordFlow() 
     .UseJsonWebTokens() 
     .AddSigningCertificate(c); 

私はUseJsonWebTokens()を無効にすると、トークンを生成して正常に認証できます。ただし、証明書が返されたトークンを検証しているかどうかはわかりません。

UseJsonWebTokensを有効にすると、このエンドポイントでJWTトークンを発行できます。しかし、私はどんな要求も認証できません!

私は、アプリの設定で、次のコードを使用しています:

app.UseJwtBearerAuthentication(new JwtBearerOptions 
    { 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true, 
     RequireHttpsMetadata = false, 
     Authority = "http://localhost:60000/", 
     Audience = "http://localhost:60000/", 
    }); 
    app.UseOAuthValidation(); 
    app.UseIdentity(); 
    app.UseOpenIddict(); 
    app.UseMvcWithDefaultRoute(); 
  • どのように私はJWTトークンが改ざんされていないことを確認するために私の証明書を使用して検証するための要求を強制することができます。
  • JWTトークンの検証と認可を許可する正しい設定は何ですか?私がJWTを使用していない場合、私は正常に認証されています。
+0

質問タイトルにタグを入れないでください! http://stackoverflow.com/help/tagging – Tseng

答えて

5

私はUseJsonWebTokens()を無効にした場合、私はトークンを生成し、正常に許可することができます。ただし、証明書が返されたトークンを検証しているかどうかはわかりません。 ASOS(OpenIddict後ろのOpenID Connectサーバーフレームワーク)で

、内蔵シリアル化メカニズムトークンを作成し、保護するために、2つの異なるがあります。IdentityModelを使用

  • 一つ(によって開発されたライブラリーは常にティを使用して作成された定義によって

アイデンティティトークン(JWT):マイクロソフト)とは、第三者によって検証標準のトークンを生成しますUseJsonWebTokens()を呼び出して、OpenIddictに同じシリアル化プロセスを使用するアクセストークンを強制的に発行させることができます。

AddSigningCertificate()を呼び出すときに指定した証明書は、常にこれらのトークンに署名するために使用されます。 (また、Microsoftによって開発された)ASP.NETコアデータ保護スタックを使用しています

  • ワン:

このスタックは、もっぱら読み取りまたは検証することを意味するものではない「独自」のトークンを生成します第三者によって、トークン形式が標準ではなく、必ずしも対称的な署名と暗号化に依存しているためです。

これは、OpenIddict自体が消費することが意図されている認証コードとリフレッシュトークンに使用するメカニズムです。これは、デフォルトのトークン形式を使用するときにアクセストークンにも使用されます。

この場合、AddSigningCertificate()を呼び出すときに指定した証明書は使用されません。

代わりに、これらのトークンは、信頼性、完全性および機密性を提供するAuthenticated Encryptionアルゴリズム(デフォルトでは、AES-256-CBC with HMACSHA256)を使用してデータ保護スタックによって常に暗号化されます。そのために、キーリングに格納されているマスターキーの1つからデータ保護スタックによって2つのキー(暗号化用、検証用)が導出されます。

JWTトークンが改ざんされていないことを確認するために、証明書で検証を要求する方法を教えてください。 JWTを使用していない場合、私は正常に認証されているので、JWTトークンの検証と承認を可能にする正しい設定は何ですか?

これらの質問に答えるには、ログを有効にしてトレースを共有すると役立ちます。

+1

このデフォルトのIdentityModelで使用される署名鍵は何ですか?私はウェブファームを使いたいと思ったのですが。 – Adam

+1

署名鍵は使用するX.509証明書(より正確にはそれに含まれるRSA鍵)です – Pinpoint

+1

鍵リングとは何ですか?マスターキーはどのように保存しますか?スタートアップ時に 'AddSigningKey() 'を呼び出す必要がありますか? –

関連する問題