mirror of
https://github.com/meysamhadeli/booking-microservices.git
synced 2026-04-10 17:59:38 +08:00
Merge pull request #330 from meysamhadeli/fix/fix-bug-404-in-jwt-config
fix: fix bug 404 in jwt config
This commit is contained in:
commit
c9b1767b41
@ -11,6 +11,7 @@ using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Core.Model;
|
||||
using BuildingBlocks.EventStoreDB.Repository;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -51,7 +52,7 @@ public class CreateBookingEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateBooking")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Booking").Build())
|
||||
.Produces<CreateBookingResponseDto>()
|
||||
|
||||
@ -6,6 +6,7 @@ using BookingMonolith.Flight.Data;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -49,7 +50,7 @@ public class CreateAircraftEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateAircraft")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<CreateAircraftResponseDto>()
|
||||
|
||||
@ -5,6 +5,7 @@ using BookingMonolith.Flight.Data;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -47,7 +48,7 @@ public class CreateAirportEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateAirport")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<CreateAirportResponseDto>()
|
||||
|
||||
@ -7,6 +7,7 @@ using BookingMonolith.Flight.Flights.ValueObjects;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -55,7 +56,7 @@ public class CreateFlightEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.CreatedAtRoute("GetFlightById", new { id = result.Id }, response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateFlight")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<CreateFlightResponseDto>(StatusCodes.Status201Created)
|
||||
|
||||
@ -4,6 +4,7 @@ using BookingMonolith.Flight.Flights.Exceptions;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
@ -44,7 +45,7 @@ public class DeleteFlightEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.NoContent();
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("DeleteFlight")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces(StatusCodes.Status204NoContent)
|
||||
|
||||
@ -5,6 +5,7 @@ using BookingMonolith.Flight.Flights.Exceptions;
|
||||
using BuildingBlocks.Caching;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
using MediatR;
|
||||
@ -39,7 +40,7 @@ public class GetAvailableFlightsEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("GetAvailableFlights")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<GetAvailableFlightsResponseDto>()
|
||||
|
||||
@ -4,6 +4,7 @@ using BookingMonolith.Flight.Flights.Dtos;
|
||||
using BookingMonolith.Flight.Flights.Exceptions;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -35,7 +36,7 @@ public class GetFlightByIdEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("GetFlightById")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<GetFlightByIdResponseDto>()
|
||||
|
||||
@ -9,6 +9,7 @@ using BuildingBlocks.Caching;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using MapsterMapper;
|
||||
using MediatR;
|
||||
@ -52,7 +53,7 @@ public class UpdateFlightEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.NoContent();
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("UpdateFlight")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces(StatusCodes.Status204NoContent)
|
||||
|
||||
@ -7,6 +7,7 @@ using BookingMonolith.Flight.Seats.ValueObjects;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -40,7 +41,7 @@ public class CreateSeatEndpoint : IMinimalEndpoint
|
||||
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
|
||||
{
|
||||
builder.MapPost($"{EndpointConfig.BaseApiPath}/flight/seat", CreateSeat)
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateSeat")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<CreateSeatResponseDto>()
|
||||
|
||||
@ -4,6 +4,7 @@ using BookingMonolith.Flight.Seats.Dtos;
|
||||
using BookingMonolith.Flight.Seats.Exceptions;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -27,7 +28,7 @@ public class GetAvailableSeatsEndpoint : IMinimalEndpoint
|
||||
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
|
||||
{
|
||||
builder.MapGet($"{EndpointConfig.BaseApiPath}/flight/get-available-seats/{{id}}", GetAvailableSeats)
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("GetAvailableSeats")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<GetAvailableSeatsResponseDto>()
|
||||
|
||||
@ -4,6 +4,7 @@ using BookingMonolith.Flight.Seats.Exceptions;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -31,7 +32,7 @@ public class ReserveSeatEndpoint : IMinimalEndpoint
|
||||
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
|
||||
{
|
||||
builder.MapPost($"{EndpointConfig.BaseApiPath}/flight/reserve-seat", ReserveSeat)
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("ReserveSeat")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<ReserveSeatResponseDto>()
|
||||
|
||||
@ -5,6 +5,7 @@ using BuildingBlocks.Contracts.EventBus.Messages;
|
||||
using BuildingBlocks.Core;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -43,7 +44,7 @@ public class RegisterNewUserEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("RegisterUser")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Identity").Build())
|
||||
.Produces<RegisterNewUserResponseDto>()
|
||||
|
||||
@ -6,6 +6,7 @@ using BookingMonolith.Passenger.Passengers.ValueObjects;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Core.Event;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -50,7 +51,7 @@ public class CompleteRegisterPassengerEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CompleteRegisterPassenger")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Passenger").Build())
|
||||
.Produces<CompleteRegisterPassengerResponseDto>()
|
||||
|
||||
@ -4,6 +4,7 @@ using BookingMonolith.Passenger.Passengers.Dtos;
|
||||
using BookingMonolith.Passenger.Passengers.Exceptions;
|
||||
using BuildingBlocks.Core.CQRS;
|
||||
using BuildingBlocks.Web;
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
using FluentValidation;
|
||||
using Mapster;
|
||||
using MapsterMapper;
|
||||
@ -35,7 +36,7 @@ public class GetPassengerByIdEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("GetPassengerById")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Passenger").Build())
|
||||
.Produces<GetPassengerByIdResponseDto>()
|
||||
|
||||
@ -50,7 +50,7 @@ public class CreateBookingEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateBooking")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Booking").Build())
|
||||
.Produces<CreateBookingResponseDto>()
|
||||
|
||||
@ -54,7 +54,7 @@ public class CreateAircraftEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateAircraft")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<CreateAircraftResponseDto>()
|
||||
|
||||
@ -51,7 +51,7 @@ public class CreateAirportEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateAirport")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<CreateAirportResponseDto>()
|
||||
|
||||
@ -59,7 +59,7 @@ public class CreateFlightEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.CreatedAtRoute("GetFlightById", new { id = result.Id }, response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateFlight")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<CreateFlightResponseDto>(StatusCodes.Status201Created)
|
||||
|
||||
@ -45,7 +45,7 @@ public class DeleteFlightEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.NoContent();
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("DeleteFlight")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces(StatusCodes.Status204NoContent)
|
||||
|
||||
@ -46,7 +46,7 @@ public class GetAvailableFlightsEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("GetAvailableFlights")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<GetAvailableFlightsResponseDto>()
|
||||
|
||||
@ -39,7 +39,7 @@ public class GetFlightByIdEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("GetFlightById")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<GetFlightByIdResponseDto>()
|
||||
|
||||
@ -56,7 +56,7 @@ public class UpdateFlightEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.NoContent();
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("UpdateFlight")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces(StatusCodes.Status204NoContent)
|
||||
|
||||
@ -44,7 +44,7 @@ public class CreateSeatEndpoint : IMinimalEndpoint
|
||||
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
|
||||
{
|
||||
builder.MapPost($"{EndpointConfig.BaseApiPath}/flight/seat", CreateSeat)
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CreateSeat")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<CreateSeatResponseDto>()
|
||||
|
||||
@ -34,7 +34,7 @@ public class GetAvailableSeatsEndpoint : IMinimalEndpoint
|
||||
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
|
||||
{
|
||||
builder.MapGet($"{EndpointConfig.BaseApiPath}/flight/get-available-seats/{{id}}", GetAvailableSeats)
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("GetAvailableSeats")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<GetAvailableSeatsResponseDto>()
|
||||
|
||||
@ -35,7 +35,7 @@ public class ReserveSeatEndpoint : IMinimalEndpoint
|
||||
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
|
||||
{
|
||||
builder.MapPost($"{EndpointConfig.BaseApiPath}/flight/reserve-seat", ReserveSeat)
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("ReserveSeat")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
|
||||
.Produces<ReserveSeatResponseDto>()
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
using Duende.IdentityServer.EntityFramework.Entities;
|
||||
|
||||
namespace Identity.Identity.Features.RegisteringNewUser.V1;
|
||||
|
||||
using System;
|
||||
@ -47,7 +49,7 @@ public class RegisterNewUserEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("RegisterUser")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Identity").Build())
|
||||
.Produces<RegisterNewUserResponseDto>()
|
||||
|
||||
@ -41,7 +41,7 @@ public class CompleteRegisterPassengerEndpoint : IMinimalEndpoint
|
||||
{
|
||||
builder.MapPost($"{EndpointConfig.BaseApiPath}/passenger/complete-registration", async (
|
||||
CompleteRegisterPassengerRequestDto request, IMapper mapper,
|
||||
IMediator mediator, CancellationToken cancellationToken) =>
|
||||
IMediator mediator, CancellationToken cancellationToken, IHttpContextAccessor httpContextAccessor) =>
|
||||
{
|
||||
var command = mapper.Map<CompleteRegisterPassenger>(request);
|
||||
|
||||
@ -51,7 +51,7 @@ public class CompleteRegisterPassengerEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("CompleteRegisterPassenger")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Passenger").Build())
|
||||
.Produces<CompleteRegisterPassengerResponseDto>()
|
||||
|
||||
@ -36,7 +36,7 @@ public class GetPassengerByIdEndpoint : IMinimalEndpoint
|
||||
|
||||
return Results.Ok(response);
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.RequireAuthorization(nameof(ApiScope))
|
||||
.WithName("GetPassengerById")
|
||||
.WithApiVersionSet(builder.NewApiVersionSet("Passenger").Build())
|
||||
.Produces<GetPassengerByIdResponseDto>()
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
using BuildingBlocks.Web;
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace BuildingBlocks.Jwt;
|
||||
@ -40,13 +41,28 @@ public static class JwtExtensions
|
||||
{
|
||||
services.AddAuthorization(
|
||||
options =>
|
||||
options.AddPolicy(
|
||||
nameof(ApiScope),
|
||||
policy =>
|
||||
{
|
||||
policy.RequireAuthenticatedUser();
|
||||
policy.RequireClaim("scope", jwtOptions.Audience);
|
||||
}));
|
||||
{
|
||||
// Set JWT as the default scheme for all [Authorize] attributes
|
||||
options.DefaultPolicy =
|
||||
new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
|
||||
.RequireAuthenticatedUser()
|
||||
.Build();
|
||||
|
||||
// Add your scope policy (optional)
|
||||
if (!string.IsNullOrEmpty(jwtOptions.Audience))
|
||||
{
|
||||
options.AddPolicy(
|
||||
nameof(ApiScope),
|
||||
policy =>
|
||||
{
|
||||
policy.AuthenticationSchemes.Add(
|
||||
JwtBearerDefaults.AuthenticationScheme);
|
||||
|
||||
policy.RequireAuthenticatedUser();
|
||||
policy.RequireClaim("scope", jwtOptions.Audience);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return services;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user