Swagger 멀티인증 처리

안녕하세요.

기존의 ASP.NET Core WebAPI 에서 JWT인증을 Header 및 QueryString으로 인증 사용중이였는데 Swagger UI에서 자주 API로 Test하다보니 번거롭다고 하면서 Basic 인증을 추가해 달라고 하네요.

문제는 두개의 인증을 개별적으로 적용하면 잘되는데 멀티로 적용하면 동작하지 않고 Jwt 인증만 시도하는 응답을 보여주고 있습니다. 두 개를 동작시킬 때 Jwt로는 되고 Basic인증 시도시 Basic인증코드를 타지 않는다는 것입니다.

혹시 두개 모두 인증을 활성화 해보신분 있으신가요 ?..
소스는 오프라인 영역에서 있어 보여드리기 어렵네요…

대충 처리한 코드는

AddSwaggerGen( JwtBearer 인증활성화, Basic 인증활성화)
AddAuthentication( AddJwtBearer, AddScheme)

입니다.

기존 jwt 인증 방식에 대한 미들웨어를 설정하였듯이, basic 인증 미들웨어를 설정하고 두 가지 인증 방식을 모두 허용하면됩니다.
AddAuthentication 메서드와 AddPolicyScheme 메서드를 활용하여 두 가지 인증 스키마를 설정할 수 있습니다.

HTTP 요청 header에서 Bearer와 Basic을 파싱하여 구분하고, 각 인증 방식에 맞는 핸들러로 토스해주면 됩니다. 이미 jwt 인증 핸들러는 구현하셨을테니, header에서 Bearer인지, Basic인지 파싱하는 부분과 Basic 인증 핸들러 구현하시면 되겠네요.

그리고 컨트롤러에서는 두 가지 인증을 동시에 받을지, 아니면 Bearer 인증인지 Basic 인증인지에 대한 어노테이션을 정의하면 됩니다. Authorize 어노테이션을 두 번 사용할 수 없으니, Bearer, Basic 그리고 두 인증을 모두 받는 등의 세 가지의 인증 핸들러를 커스텀해야합니다.