2017-09-06 12 views
2

SPA UIとJwtベアラトークンを使用してアクセス制御を行うWeb APIを使用してアプリケーションを構築しようとしています。私はユーザーを認証し、ベアラトークンをWebリクエストに送信できますが、そうすると次のエラーが発生します。Azure AD Jwtベアラートークン

ベアラが認証されていません。失敗メッセージ:IDX10500:署名 検証に失敗しました。 署名を検証するセキュリティキーは提供されていません。

私は

https://login.microsoftonline.com/common/discovery/keys

でで見つかったキーセットを使用するミドルウェアにしたいが、私は明らかに何かが欠けています。以下は私の起動時にベアラトークンを設定するためのコードスニペットです。誰かが間違っているところを指摘できますか?

var clientId = Configuration["AzureAd:ClientId"]; 
    var tenantId = Configuration["AzureAd:TenantId"]; 
    var issuer = $"https://sts.windows.net/{tenantId}/"; 

    services.AddAuthentication(options => 
    { 
     options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
     options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 
    }) 
     .AddJwtBearer(options => 
     { 
     options.RequireHttpsMetadata = false; 
     options.SaveToken = true; 
     options.Authority = "https://login.microsoftonline.com/common/"; 

     options.TokenValidationParameters = new TokenValidationParameters() 
     { 
      ValidateIssuer = true, 
      ValidIssuer = issuer, 
      ValidateAudience = true, 
      ValidAudiences = new string[] { clientId }, 
      ValidateLifetime = true 
     }; 
     }); 
+0

まったく同じ問題があります。 –

+0

同じエラーを見て、私自身。 –

答えて

0

これは私のコードで修正しましたが、私はまだこの新しいものがどのように動作するかを学んでいます。私にとっては、ValidateIssuerSigningKeyfalseに設定されていても、IssuerSigningKeyを設定しなければならなかった。特定の値が必要かどうかは分かりませんが、私はJWTトークンに署名したときと同じ値に設定します。

options.TokenValidationParameters = new TokenValidationParameters 
{ 
    ValidateAudience = false, 
    ValidateLifetime = false, 
    ValidateIssuer = false, 
    ValidateIssuerSigningKey = false, 
    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("this is super secret")), 
    ValidateActor = false 
}; 
+0

あなたは単純にトークンの検証を無効にしたようです。人々が偽造トークンを提供する恐れがあるために検証されていないトークンは使用したくありません。 – GlennSills

+0

それは必ずしも要点ではありません。最終的に、私はトークンの検証を始めました。問題を引き起こしていたIssuerSigningKeyが設定されていないという事実です。 –

関連する問題