سلام من یه فیلتر ایجاد کردم برای بررسی سطح دسترسی هام به اسم PermissionCheckerAttribute و از jwttoken استفاده میکنم یعنی توکن رو میگیرم و meddalware نوشتم که توکن و بهش میدم و کاربر رو بهم میده همه چیز اوکی کار میکنه فقط مشکل من همون فیلتر PermissionCheckerAttribute هست وقتی بالای اکشن با حتی کل کنترلر هم میزارمش اصلا کد به بریک پوینتم نمیرسه و درخواست ریجک میشه پیغام Unauthorized بهم میده ممنون میشم راهنماییم کنید.اینم کدی که نوشتم
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class PermissionCheckerAttribute : AuthorizeAttribute, IAuthorizationFilter
{
private string _role;
private IPermissionService _permissionService;
public PermissionCheckerAttribute(string role)
{
_role = role;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
_permissionService = context.HttpContext.RequestServices.GetService(typeof(IPermissionService)) as IPermissionService;
User user = context.HttpContext.Items["User"] as User;
var userId = user.Id;
if (user == null)
{
context.Result = JsonResponseStatus.UnAuthorized();
}
var result = _permissionService.CheckPermission(userId, _role).Result;
if (!result)
{
context.Result = JsonResponseStatus.NoAccsess();
}
}
سلام دوست من
شما از Authorize Filter استفاده کردین که سیستم دیفالت اون با Cookie هستش و jwt رو نمیشناسه
باید خودتون یک attribute ساده بنویسین و ازش به عنوان Permission Checker استفاده کنین
استاد عزیز ممنون از جوابتون توی آموزش ها در قسمت دسترسی خودتون دقیقا از همین شیوه استفاده کردین و jwt هم استفاده میکنین اونجا کار میکنه چرا ولی در کد من کار نمیکنه. البته من با نسخه 6 پروژه رو آوردم بالا ولی شما 2.1 بود
تنظیمات اصلی رو در فایل program.cs روی jwt قرار دادین؟
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
//ValidIssuer = builder.Configuration["Jwt:Issuer"],
//ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey
(Encoding.UTF8.GetBytes(builder.Configuration.GetSection("AppSettings")["Secretkey"])),
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = false,
ValidateIssuerSigningKey = true
};});
builder.Services.AddAuthorization();بله استاد این کدهای تظیمات هستن که گذاشتم در فایل Program
این صفات رو پاک کنین و مجدد تست کنین
من از این صفات استفاده نکردم در پروژه:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]