2016-07-18 5 views
15

다음은 this tutorial이지만 아직 로그 아웃 방법을 알려주지 않습니다. 그냥 필요한 또 하나 개의 행동Owin Providers에서 로그 아웃하는 방법은 무엇입니까?

public ActionResult SignOut() 
{ 
     Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie); 
     return RedirectToAction("Index", "Home"); 
} 

이 방법 플러스 게시 I의 3 줄 중 하나를 추가 할 수 https://github.com/AndersAbel/SocialLoginWithoutIdentity

: 나는

Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie); 

Request.GetOwinContext().Authentication.SignOut() 

      Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie); 

당신은 여기에 샘플 코드를 얻을 수하려고 노력 위

지금 내 결과는 보안 페이지로 이동하여 볼 수 있습니다. 그런 다음 내 로그 아웃을 진행 한 다음 로그 아웃 후 보안 페이지로 다시 이동합니다. 안전한 페이지로 돌아갈 수 있습니다.

그래서 실제로 실제로 서명하지 않았습니다.

+0

로그 아웃하지 않습니까? – Win

+0

아니요. 로그인하지 않고도 내 보안 페이지에 액세스 할 수 있습니다. 모든 클레임이 포함 된 쿠키를 다시 만드는 것으로 보입니다. 영원히 자동 로그인하는 것 같습니다. – chobo2

+0

http://stackoverflow.com/a/24611815/2850543 –

답변

11

이 튜토리얼에서 언급했듯이 미들웨어 used는 기본 인증 유형을 사용하지만 무시하지는 않습니다. 당신은 ASP, 에 대한 쿠키 아니라 구글 제공자를 저장하는 데 사용되는 하나를 삭제하는 Owin에 대한 매개 변수로 만 externalCookie를 사용하여

,

그렇게 할, 당신은 모두의 배열을 얻을 수있을 것이다 현재 쿠키. 그것은 쉬운 방법과 같이 수행 할 수 있습니다

Request.GetOwinContext() 
     .Authentication 
     .SignOut(HttpContext.GetOwinContext() 
          .Authentication.GetAuthenticationTypes() 
          .Select(o => o.AuthenticationType).ToArray()); 

이이 자습서에 알려져있는 곳입니다 :

이 필요한 이유 UseGoogleAuthentication에 대한 호출은 매우 명백해야한다.

하지만 첫 번째 toSetDefaultSignInAsAuthenticationType은 으로 분명하지 않습니다. 로그인 미들웨어는 일반적으로 소셜 로그인 미들웨어에 등록 된 외부 쿠키 미들웨어 에 의존합니다. 외부 쿠키 미들웨어 인 경우 자체를 기본 로그인 유형으로 설정합니다. 소셜 로그인 미들웨어가 외부 쿠키 인 을 사용해야한다는 것을 알고 있습니다. 이 설정에는 외부 쿠키가 없으므로 기본 쿠키 유형으로 기본 쿠키 미들웨어를 수동으로 설정하려면 이 필요합니다. 쿠키 미들웨어는 인증 유형이 소셜 로그인 미들웨어로 만든 ID와 일치하는 경우에만 쿠키를 발급합니다.owin 외부 인증 파이프 라인을 보시려면

+0

이것은 작동하는 것 같습니다. 나는 조금 혼란스러워 ASP를위한 쿠키 만 지울 수 있습니까? "기본 인증 유형으로 100 %를 의미하지만 무시하지는 마십시오." 나는 외부 쿠키가 실제로 Google과 같은 것으로 만들어진 쿠키를 참조한다고 생각했습니다. Asp 쿠키가 아닙니다. – chobo2

+0

죄송합니다. 영어는 제 모국어가 아니므로 의미를 나타내지는 않을 수도 있지만,이 paragraphe의 링크에 설명되어 있습니다. – GaelSa

+0

arf 인터넷 문제, 글쎄, 해결책을 얻은 위치를 보여주기 위해 내 대답을 업데이트했습니다. 튜토리얼에서. – GaelSa

1

허가를 받아야 클래스의 [권한 부여] 속성을 사용

[Authorize] 
public class MeController : ApiController 
{ 
    // GET api/<controller> 
    public IEnumerable<object> Get() 
    { 
     var identity = User.Identity as ClaimsIdentity; 
     return identity.Claims.Select(c => new 
     { 
      Type = c.Type, 
      Value = c.Value 
     }); 
    } 
} 

소스 : http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

+0

내 물건에 지금 문제가없는 태그를 승인했습니다. 문제는 내가 튜토리얼을 따르고 Signout 메서드를 추가 한 것입니다 (이 코드에는 2 줄의 코드가 있고, 3 단계 중 하나는 OP에 있고 홈 페이지로 리디렉션됩니다). 로그 아웃을 클릭하고 보안 페이지로 돌아 가면 실제로 로그 아웃해야하지만 보안 페이지에 계속 액세스 할 수 있습니다. 그것은 실제로 나를 로그 아웃하지 않습니다. – chobo2

+1

왜 반대표입니까? 이 질문의 시작 부분에 문제가 로그 아웃되거나 페이지가 보안되지 않는지 여부는 알려지지 않았습니다 ... –

3

캐시 제어 헤더를 설정하십시오.

public ActionResult SignOut() { 
    var authenticationTypes = new string[] { 
     DefaultAuthenticationTypes.ApplicationCookie, 
     DefaultAuthenticationTypes.ExternalCookie 
    }; 
    AuthenticationManager.SignOut(authenticationTypes); 
    // HACK: Prevent user from being able to go back to a logged in page once logged out 
    Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetNoStore(); 
    // now redirect 
    return RedirectToAction("Index", "Home");  
} 

private IAuthenticationManager AuthenticationManager { 
    get { 
     return Request.GetOwinContext().Authentication; 
    } 
} 

더 브라우저의 뒤로 버튼을 클릭하면 사용자를 중지 없다, 당신은 비활성화 할 수 있습니다 자바 스크립트를 시도하지 않는. 사용자는 페이지로 돌아가서 이전 페이지에 있던 내용을 볼 수 있지만 보호 된 링크를 클릭하거나 페이지를 새로 고치려고하면 다시 리디렉션되어 로그인하게됩니다.

관련 문제