방금 WebAPI 프로젝트에 Swashbuckle을 설치했으며 현재까지는 /swagger
api 엔드 포인트가 공개되어 있지만 좋은 결과를 얻었습니다.Swagger 및 WebAPI (Swashbuckle) -/swagger 엔드 포인트를 비공개로 설정 하시겠습니까?
내 모바일 앱 개발자에게만 액세스를 허용하고 싶습니다. 내 API를 비밀번호 뒤에 숨기거나 여기에서 양식 인증을 요청하려면 어떻게해야합니까?
방금 WebAPI 프로젝트에 Swashbuckle을 설치했으며 현재까지는 /swagger
api 엔드 포인트가 공개되어 있지만 좋은 결과를 얻었습니다.Swagger 및 WebAPI (Swashbuckle) -/swagger 엔드 포인트를 비공개로 설정 하시겠습니까?
내 모바일 앱 개발자에게만 액세스를 허용하고 싶습니다. 내 API를 비밀번호 뒤에 숨기거나 여기에서 양식 인증을 요청하려면 어떻게해야합니까?
나는 아래로 이것을 달성 :
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
string username = null;
if (Thread.CurrentPrincipal.Identity != null && Thread.CurrentPrincipal.Identity.Name != null) {
username = Thread.CurrentPrincipal.Identity.Name.ToLower();
}
if (IsSwagger(request) && username != "Admin") {
var response = request.CreateResponse(HttpStatusCode.Unauthorized);
return Task.FromResult(response);
}
else {
return base.SendAsync(request, cancellationToken);
}
}
private bool IsSwagger(HttpRequestMessage request) {
return request.RequestUri.PathAndQuery.StartsWith("/swagger");
}
IIS에서 호스트되는 경우 프로젝트의 경우 IIS 웹 사이트에서 Windows (사이트 폴더에 대한 적절한 액세스 권한 사용) 또는 basic authentication을 사용하고 익명 인증을 사용하지 않도록 설정할 수 있습니다.
@bsoulier 답변은 완벽하게 합리적입니다. 또 다른 방법은 JavaScript/AJAX를 사용하는 것입니다.
엔드 포인트의 대부분의 인증으로 충분하기 때문에 실제 swagger-ui 색인 페이지를 보호하지 않았습니다.
그러나 모든 JavaScript는 index
페이지에 쉽게 삽입하거나 사용자 정의 index
페이지를 사용할 수 있습니다. 즉, 원하는 인증을 사용할 수 있습니다. 간단한 HTML 양식을 만들고 AJAX를 사용하여 사용자가 어떤 내용을 보거나 실제 swagger-ui 페이지로 리디렉션하기 전에 로그인하도록 전화를 걸기 만하면됩니다. SwaggerConfig
에서 자신감-UI 페이지에
주입 자바 스크립트 파일 :
c.InjectJavaScript(thisAssembly, "Your.Namespace.testScript1.js");
이 SwaggerConfig
에서 자신감-UI 페이지에 사용자 정의 인덱스 페이지를 주입 :
c.CustomAsset("index", containingAssembly, "Your.Namespace.index.html");
https://github.com/domaindrivend 링크를 참조 할 수 있습니다. ev/Swashbuckle/issues/601 –