OpenIdDict를 인증에 사용하는 asp.net 핵심 웹 앱이 있습니다. 인증되지 않은 Ajax 호출이 응답 본문에 200 및 로그인 양식을 반환하는 것으로 나타났습니다. OpenIdDict가 요청을 처리 한 이후로 예상 한 동작이므로 ASP.NET 코어가이를 처리하고 200을 반환합니다. Startup.cs에서 'UseIdentity()'가 호출되기 때문에 ASP.NET 코어가 처리합니다. OpenIdDict에서 본 모든 예제는 'UseIdentity'를 호출합니다. 나는 2 개의 질문이있다.openIdDict를 사용하면 Startup.cs에서 'UseIdentity()'가 필요합니까?
- ASP.NET 코어가 내 요청을 처리하는 것을 원하지 않는다면 'UseIdentity()'를 제거하면됩니까? 나는 그것을 시도하고 이제는 200 대신 401이 생겼다.이 일에 어떤 해가 되는가 아니면 OpenIdDict에 'UseIdentity()'가 필요합니까?
- UI보기에 대한 리디렉션 로그인 기능을 잃고 싶지 않으면 OnRedirectToLogin을 재정의하기 위해이 방법을 사용하는 것이 가장 쉽고/가장 안전합니다. 코드 예제 아래 :
options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents { OnRedirectToLogin = ctx => { if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == (int) HttpStatusCode.OK) { ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized; } else { ctx.Response.Redirect(ctx.RedirectUri); } return Task.FromResult(0); } };
코드 샘플 소스 : 여기에이 문제의 https://devblog.dymel.pl/2016/07/07/return-401-unauthorized-from-asp-net-core-api/
또한 토론 : https://github.com/aspnet/Security/issues/804
잘 작동합니다. 감사! – Bloodhound
Core 2.0 및 OpenIdDict 2.x에서 같은 작업을 수행하는 샘플 프로젝트 나 가이드가 있습니까? – Bloodhound
모든 OpenIddict 샘플이 2.x 용으로 업데이트되었습니다 : https : // github.co.kr/openiddict/openiddict-samples. 안타깝게도 경로 기반 인증 미들웨어 선택은 2.x에서 더 이상 지원되지 않으며'[Authorize (AuthenticationSchemes = "Bearer")] 접근 방식을 사용하는 것이 좋습니다. 자세한 내용은 https://github.com/aspnet/Announcements/issues/262를 참조하십시오. – Pinpoint