2017-12-07 2 views
1

나는 Github에서 버그를 제기했지만 도움이 될만한 사람이 있는지 알고 싶었습니다. Bug #1839신원 확인 서버 4 OpenId Connect to/Account/AccessDenied

문제/단계 문제

나는 우리의 푸른 광고에 대한 인증을 오픈 아이디 연결을 사용하려고를 재현하지만 콜백 메서드 후 나는// 계좌로 리디렉션

을 AccessDenied 얻을 인증이 완료되면 azure는 다시 콜백 메소드로 리디렉션됩니다.

/// <summary> 
    /// Post processing of external authentication. Callback from azure. 
    /// </summary> 
    [HttpGet] 
    public async Task<IActionResult> TprUserLoginCallback(string returnUrl) 
    { 
     // read external identity from the temporary cookie 
     var claimsPrincipal = await HttpContext.Authentication.AuthenticateAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme); 

     if (claimsPrincipal == null) 
     { 
      throw new Exception("External authentication error"); 
     } 

     var claimResult = externalClaimsMapper.Map(claimsPrincipal); 
     var claims = claimResult.Claims.ToArray(); 

     await HttpContext.Authentication.SignInAsync(claimResult.UserId, claimResult.UserName, claimResult.Provider, claims); 

     return Redirect(interactionService.IsValidReturnUrl(returnUrl) ? returnUrl : "~/"); 
    } 

리다이렉트는 쿠키가 금지 된 말을 로그에 항목을 추가하는 ASP 핵심 미들웨어 (v1.1.3)에 터질 것 같다.

2017년 12월 6일 11 : 01 : 13,920 [40] INFO Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log - AuthenticationScheme는 : idsrv.external는 금지하고 페이지로 리디렉션 것이 후 하였다/계정/AccessDenied.

2017년 12월 6일 11 : 01 : 13,921 [40] INFO Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectMiddleware.Log - AuthenticationScheme : OpenIdConnect이 금지되었다.

시작 - 쿠키 인증 및 오픈 ID 연결 인증 당신이 로그인 된 사용자를 리디렉션하고 URL을 수동으로

로 이동하는 경우 응용 프로그램에 액세스 할 수 있습니다 후

app.UseIdentityServer(); 

     var appSettings = container.GetInstance<AppSettings>(); 

     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme, 
      AutomaticAuthenticate = false, 
      AutomaticChallenge = false, 
      ExpireTimeSpan = TimeSpan.FromMinutes(appSettings.DefaultTokenLifetimeInMinutes) 
     }); 

     app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
     { 
      ClientId = appSettings.AzureClientId, 
      Authority = appSettings.AzureAuthority, 
      PostLogoutRedirectUri = appSettings.AzurePostLogoutRedirectUri, 
      DisplayName = "TPR Login", 
      SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme, 
      ResponseType = OpenIdConnectResponseType.IdToken, 
      SaveTokens = true, 
      RequireHttpsMetadata = false // F5's HTTPS handling so traffic will be HTTP 
     }); 

     app.UseStaticFiles(); 
     app.UseCors("default"); 

     app.UseMvc(ConfigureRoutes.Configure); 

로그 파일의 관련 부분

2017-12-06 11 : 01 : 13,899 [40] 정보 Microsoft.AspNetCore.Hosting.Internal.WebHost.Log - 요청 시작 HTTP/1.1 GET http://localhost:44362/ 2017-12-06 11 : 01 : 13,900 [40 ] DEBUG Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Log - 목적 와 키에 보호 해제 작업을 수행 {144dcece-5570-4965-a74c-0ec3aed546e8} ('C : \ 코드 \ tfs03 \ 단일 로그인 에 \ 로그인 \ ReleaseSSO-Dev \ WebUI \ Login.IdentityServer ', 'Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware ', 'idsrv ','v2 '). 2017-12-06 11 : 01 : 13,902 [40] 정보 Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log - HttpContext.User는 authenticationScheme : idsrv의 AutomaticAuthentication을 통해 병합되었습니다. 2017-12-06 11 : 01 : 13,904 [40] 정보 Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log - AuthenticationScheme : idsrv가 성공적으로 인증되었습니다. 2017-12-06 11 : 01 : 13,905 [40] DEBUG IdentityServer4.Hosting.EndpointRouter.Log - 끝점 항목이 없습니다. 요청 경로 :/2017-12-06 11 : 01 : 13,906 [40] DEBUG Microsoft. AspNetCore.StaticFiles.StaticFileMiddleware.로그 - 요청 경로/지원되는 파일 형식과 일치하지 않습니다. 2017-12-06 11 : 01 : 13,909 [40] DEBUG Microsoft.AspNetCore.Routing.RouteBase.Log - 요청이 'default' 템플릿 '{controller = Login}/{action = Login}'을 (를) 템플릿에 추가하십시오. 2017-12-06 11 : 01 : 13,910 [40] 디버그 Microsoft.AspNetCore.Mvc.Internal.ActionSelector.Log - 작업 'Login.IdentityServer.Controllers.LoginController.Login (Login.IdentityServer)'의 ID가 'cba23692 01 : 13,911 [40] DEBUG Microsoft.AspNetCore.Mvc.Internal -b89e-4fe7-bf59-ccc14c18352a Microsoft.AspNetCore.Mvc.Internal.HttpMethodActionConstraint ' 2017년 12월 6일 11' 는 제약 일치하지 않습니다 ' .ControllerActionInvoker.Log - 실행 동작 Login.IdentityServer.Controllers.LoginController.Login (Login.IdentityServer) 2017년 12월 6일 11 : 01 : 13,913 [40] INFO Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Log - Executin g 작업 메서드 Login.IdentityServer.Controllers.LoginController.Login 인수가있는 (Login.IdentityServer) - ModelState가 유효 함 2017-12-06 11 : 01 : 13,914 [40] DEBUG Microsoft.AspNetCore.Mvc.Internal .ControllerActionInvoker.Log - 실행 된 작업 메서드 Login.IdentityServer.Controllers.LoginController.Login (Login.IdentityServer), 반환 된 결과 Microsoft.AspNetCore.Mvc.ChallengeResult. 2017-12-06 11 : 01 : 13,915 [40] 정보 Microsoft.AspNetCore.Mvc.ChallengeResult.Log - 인증 스키마 (OpenIdConnect)를 사용하여 ChallengeResult를 실행합니다. 2017년 12월 6일 11 : 01 : 13,917 [40] DEBUG Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Log - 목적 ('키와 보호 해제 작업을 수행 {144dcece-5570-4965-a74c-0ec3aed546e8} C : \ code \ tfs03 \ Single Sign \ Login \ ReleaseSSO-Dev \ WebUI \ Login.IdentityServer ', 'Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware ', 'idsrv.external ','v2 '). 2017-12-06 11 : 01 : 13,918 [40] 정보 Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log - AuthenticationScheme : idsrv.external이 성공적으로 인증되었습니다. 2017-12-06 11 : 01 : 13,920 [40] 정보 Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log - AuthenticationScheme : idsrv.external이 금지되었습니다. 2017-12-06 11 : 01 : 13,921 [40] 정보 Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectMiddleware.Log - AuthenticationScheme : OpenIdConnect가 금지되었습니다. 2017-12-06 11 : 01 : 13,922 [40] 정보 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Log - 실행 된 작업 Login.IdentityServer.Controllers.LoginController.Login (Login.IdentityServer) in 10.0229ms 2017- 12-06 11 : 01 : 13,924 [40] 디버그 Microsoft.AspNetCore.Server.Kestrel.Log - 연결 ID "0HL9SILL2SM7P"가 활성 응답을 완료했습니다. 2017-12-06 11 : 01 : 13,926 [40] 정보 Microsoft.AspNetCore.Hosting.Internal.WebHost.Log - 요청 완료26.936ms 302 2017-12-06 11 : 01 : 13,930 [24] 정보 Microsoft .AspNetCore.Hosting.Internal.WebHost.Log이 - GET HTTP/1.1 개시되는 요청 http://localhost:44362/Account/AccessDenied?ReturnUrl=%2Flogin%2Ftpruserlogincallback 2017년 12월 6일 11 : 01 : 13,932 [24] DEBUG Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Log - 수행 목적 와 키 {144dcece-5570-4965-a74c-0ec3aed546e8}에 보호 해제 작업 ('C : \ 코드 \ tfs03 \ 단일 로그인 \ 로그인 \ ReleaseSSO 데브 \ UI를 \ Login.IdentityServer에 ', 'Microsoft.AspNetCore .Authentication.Cookies.CookieAuthenticationMiddleware ', 'idsrv ','v2 '). 2017-12-06 11 : 01 : 13,934 [24] 정보 Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log - HttpContext.User가 authenticationScheme : idsrv의 AutomaticAuthentication을 통해 병합되었습니다. 2017-12-06 11 : 01 : 13,935 [24] 정보 Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log - AuthenticationScheme : idsrv가 성공적으로 인증되었습니다. 2017-12-06 11 : 01 : 13,936 [24] DEBUG IdentityServer4.Hosting.EndpointRouter.Log - 끝점 항목이 없습니다. 요청 경로 :/Account/AccessDenied 2017-12-06 11 : 01 : 13,938 [24] DEBUG Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Log - 요청 경로/Account/AccessDenied가 지원되는 파일과 일치하지 않습니다. type 2017-12-06 11 : 01 : 13,940 [24] DEBUG Microsoft.AspNetCore.Routing.RouteBase. 로그 - 성공적으로 요청이 이름 'default'및 템플릿 '{controller = Login}/{action = Login}'으로 경로와 일치했습니다. 2017-12-06 11 : 01 : 13,941 [24] DEBUG Microsoft.AspNetCore.Mvc.Internal.MvcRouteHandler.Log - 아니요 작업이 현재 요청과 일치 함 2017-12-06 11 : 01 : 13,943 [24] 디버그 Microsoft .AspNetCore.Builder.RouterMiddleware.Log - 요청이 과 일치하지 않습니다. 2017-12-06 11 : 01 : 13,945 [24] DEBUG Microsoft.AspNetCore.Server.Kestrel.Log - 연결 ID "0HL9SILL2SM7P"가 활성 응답을 완료했습니다. 2017년 12월 6일 11 : 01 : Microsoft.AspNetCore.Hosting.Internal.WebHost.Log INFO [24] 13,946 - I 최근에 동일한 문제가 발생 15.7755ms 404

답변

0

완성 요청 이 원인이었다 로그 아웃 중에 쿠키가 삭제되지 않았 음을 나타냅니다. 내 경우에는 CookieName 속성이 내 CookieAuthenticationOptions StartUp.cs에 설정되어 있으면이 문제가 발생하는 것으로 나타났습니다.

브라우저에서이 문제를 조사하는 동안 쿠키가이 이름으로 생성되지 않고 대신 "idsvr.external"을 사용하고있는 것으로 나타났습니다. 쿠키 이름 설정을 삭제하면 문제가 해결되었습니다.

app.UseCookieAuthentication(new CookieAuthenticationOptions) 
{ 
    ... 
    CookieName = "...", 
    ... 
}