私は、JWTをDotNetコア2.0で動作させるためにかなりの冒険をしてきました(現在、本日最終リリースに到達しています)。あるトンのドキュメントのは、しかし、すべてのサンプルコードでは、コアに新鮮で推奨されないAPIを使用して来ているように見える、積極的に実装されることになっています正確にどのように把握することを目のくらむようです。ホセを使ってみましたが、アプリです。UseJwtBearerAuthenticationは非推奨になり、次に何をすべきかについてのドキュメントはありません。
承認ヘッダーからJWTを解析し、HS256でエンコードされたJWTトークンのリクエストを承認できるdotnet core 2.0を使用するオープンソースプロジェクトを持っている人はいますか?
以下のクラスは例外をスローしませんが、リクエストは許可されておらず、なぜ許可されていないのかわかりません。応答は空の401なので、例外はなかったが、秘密が一致していないことを示しています。
奇妙なことに、トークンはHS256アルゴリズムで暗号化されていますが、どこでもそのアルゴリズムを使用するように強制するように指示するインジケーターが表示されません。
これが私がこれまでに持っているクラスです:
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Net.Http.Headers;
using Newtonsoft.Json.Linq;
using Microsoft.IdentityModel.Tokens;
using System.Text;
namespace Site.Authorization
{
public static class SiteAuthorizationExtensions
{
public static IServiceCollection AddSiteAuthorization(this IServiceCollection services)
{
var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("SECRET_KEY"));
var tokenValidationParameters = new TokenValidationParameters
{
// The signing key must match!
ValidateIssuerSigningKey = true,
ValidateAudience = false,
ValidateIssuer = false,
IssuerSigningKeys = new List<SecurityKey>{ signingKey },
// Validate the token expiry
ValidateLifetime = true,
};
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o =>
{
o.IncludeErrorDetails = true;
o.TokenValidationParameters = tokenValidationParameters;
o.Events = new JwtBearerEvents()
{
OnAuthenticationFailed = c =>
{
c.NoResult();
c.Response.StatusCode = 401;
c.Response.ContentType = "text/plain";
return c.Response.WriteAsync(c.Exception.ToString());
}
};
});
return services;
}
}
}