나는 DotNet 코어 2.0에서 JWT를 작동시키기 위해 꽤 모험을 해왔습니다 (현재 최종 릴리스에 도달했습니다). 거기입니다 톤 문서는 있지만, 모든 샘플 코드는 사용되지 않는 API를 사용하고, 긍정적으로 그것을 구현해야하는데 방법을 정확하게 파악하는 현기증의 핵심에 신선한 오는 것 같다. 나는 Jose를 사용해 보았지만 앱. 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;
}
}
}