मैं JWT को डॉटनेट कोर 2.0 (अब अंतिम रिलीज पर पहुंचता हूं) पर काम करने के लिए काफी रोमांच में हूं। प्रलेखन का एक टन है, लेकिन सभी नमूना कोड अपग्रेड किए गए एपीआई का उपयोग करते हैं और कोर में नए सिरे से आते हैं, यह सकारात्मक रूप से चक्कर लगा रहा है कि यह कैसे लागू किया जाना चाहिए। मैंने जोस, लेकिन ऐप का उपयोग करने की कोशिश की। UseJwtBearerAuthentication को हटा दिया गया है, और आगे क्या करना है, इस पर कोई दस्तावेज नहीं है।
क्या किसी के पास एक ओपन सोर्स प्रोजेक्ट है जो डॉटनेट कोर 2.0 का उपयोग करता है जो केवल प्राधिकरण हेडर से एक जेडब्ल्यूटी को पार्स कर सकता है और मुझे एचएस 256 एनकोडेड जेडब्ल्यूटी टोकन के लिए अनुरोधों को अधिकृत करने की अनुमति देता है?
नीचे दिए गए वर्ग में कोई अपवाद नहीं है, लेकिन कोई अनुरोध अधिकृत नहीं है, और मुझे कोई संकेत नहीं मिलता है कि वे अनधिकृत क्यों हैं। प्रतिक्रियाएं 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;
}
}
}