NTLM (Windows) 인증을 사용하여 IIS에서 ASP.NET 4 앱을 실행하고 있습니다. 다른 모든 인증 체계는 비활성화됩니다. 서버에 성공적으로 인증 할 수 있습니다. 그러나 성공적으로 인증 한 후에도 Javascript 파일을 요청할 때 서버 (아래 설명 된 특정 상황에서)는 여전히 401 Unauthorized 오류를 반환합니다. JS 파일을 다운로드 할 권한이없는 이유는 무엇입니까?
물론 NTLM의 작동 방식을 완전히 이해하지는 못하지만 보호 된 리소스를 요청할 때 다음과 같은 일이 발생할 것으로 예상합니다.
이 원하는 기능은 일반적으로 작동합니다. Firefox, Chrome 78 또는 Chrome 83에서 사이트에 액세스 할 때 모든 것이 예상대로 작동합니다. 그러나 Chrome 70을 사용하여 사이트에 액세스하면 대신 다음이 발생합니다.
그러나 Fiddler를 켜고 https를 사용하고 있기 때문에 https를 해독하도록 구성했을 때 Chrome 70은 Firefox 및 Chrome 78 및 Chrome 83과 마찬가지로 올바르게 작동하기 시작했습니다. Fiddler를 다시 끄고 동일한 오류 (JS 파일에서)가 다시 발생했습니다.
문제가 무엇인지 아는 사람이 있습니까?
감사!
문제는 인증이 아닙니다. 인증이 올바르게 작동했습니다.
문제는 Angular 8/9 및 Chome 70에서 발생했습니다. 이 게시물 을 통해 문제를 설명하는 이 포럼 스레드 를 발견 할 수있었습니다.
결과적으로 Angular 8은 index.html이 script
태그 형식을 지정 하는 방식을 변경했습니다 . Angular 8+에서 태그는 JS 모듈 등을 사용하며 JS 모듈을 지원하지 않는 브라우저를위한 대체 기능을 포함합니다. 그러나 Chrome 70 (및 기타 가능)은 JS 모듈을 제대로 지원 하지 않는 것 같습니다 (Chrome 70이 수행하는 작업과 수행하지 않는 작업의 정확한 뉘앙스를 이해하지 못함). 따라서 JS 모듈을 지원하지 않는 브라우저에 대해 폴백을 사용하는 대신 Chrome 70은 JS 파일에 대해 잘못된 형식의 요청을 한 것으로 보입니다. 특히 Chrome 70은 JS 파일을 요청했지만 MIME 유형을 "text / javascript"대신 "text / plain"으로 요청했습니다. IIS가이 잘못된 요청을 받았을 때 401 오류를 반환했습니다. (나는 그것이 400 오류를 반환한다고 생각했을 것이지만 무엇이든간에.)
Fiddler를 켜면 문제가 해결 된 이유를 모르겠습니다. 아마도 Fiddler가 (가정) 잘못된 헤더를 다시 올바른 것으로 변경하고 있었을까요? 모르겠어요.
해결책 은 간단합니다. tsconfig.json 파일에서 대상을 "es2015"대신 "es5"로 설정하기 만하면됩니다 (또는 향후 기본값이되는 다른 항목). es5로 컴파일하면 Chrome 70을 혼동하는 기능을 사용하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다