2014-04-10 1 views
6

에 CookieDomain 설정?Asp.Net 신원 - 내가 Request.Url이나 내 데이터베이스에 저장된 일부 설정에서이 값을 끌어하려는 경우 내가 런타임에 CookieAuthenticationOptions에 CookieDOmain을 설정하는 방법 런타임

나는 하위 도메인을 지원하지만 또한에 각각 다른 도메인이 너무 멀티 세입자를 지원합니다. 순간이에서

내가이 중 하나에 액세스 할 수 없습니다 구성되어 있습니다.

답변

10

당신은 당신의 자신의 쿠키 제공을 할당 할 수 있습니다 :

public class CookieAuthProvider : CookieAuthenticationProvider 
{ 
    public override void ResponseSignIn(CookieResponseSignInContext context) 
    { 
     //Alter you cookie options 
     //context.CookieOptions.Domain = "www...";  
     base.ResponseSignIn(context); 
    } 
} 

ResponseSignIn을 구현하면 쿠키로 변환되기 전에 끝점에서 로그인 정보를 제공 할 때 호출됩니다. 이 방법을 구현함으로써 소유권 주장과 항공권에 들어가는 추가 정보가 변경 될 수 있습니다.

CookieResponseSignInContext이 전달되며 ResponseSignIn 호출 중에 바꿀 수 있거나 바꿀 수있는 CookieOptions 속성이 표시됩니다. 카타나 프로젝트에서

코드 참조 :

+1

언급 한 코드는 Owin 3.0.0-beta2-30422-012-dev를 기반으로하므로 이전 버전을 사용하는 경우 수정해야 할 수도 있습니다. –

+0

나는 이것을 시도했지만 SignOut이 작동을 멈췄다는 것을 알았다. 이견있는 사람? –

+1

Do net이 나를 속일 수 있습니까? 'CookieOptions' 속성을 찾지 못했지만'Options' 속성을 찾았다면,이 대답에 오타가 있다고 생각하여 그것을 사용하지 마십시오. 그것은 사실이 아닙니다. CookieOptions 속성이 없으면 Microsoft.Owin.Security.Cookies 참조를 업데이트해야합니다.'Options' 속성에 대한 직접적인 변경은 이후 요청에 대한 관리자 옵션을 변경하지만 현재 옵션에 대한 관리자 옵션을 변경하지 않으므로 버그가 발생합니다! 'CookieOptions' 속성에 대한 변경 사항은 현재 요청에만 적용됩니다. –

3

당신은 이미 시도 마십시오

CookieAuthProvider myProvider = new CookieAuthProvider(); 
app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = myProvider 
}); 

중 하나가 자신을 구현하거나 기존의 공급자로부터 상속 :

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = "Application", 
    LoginPath = "/Account/Login", 
    CookieDomain = ".myDomain.com" 
}); 
+1

영업 이익은 고정 동적으로이 작업을 수행하고 싶어하지 보인다 사전에 알려진 값/개발자가 새 도메인에 배포 할 때 변경하지 않아도됩니다. – pwdst

1

그것은 MK 것 같습니다. SlidingExpiration 옵션을 사용하는 경우 응답에서 토큰 갱신을 올바르게 처리 할 수 ​​없습니다. 해결 방법으로

대신 사용자 정의 쿠키 제공자를 공급, 사용자 정의 쿠키 관리자를 공급하고, 추가/쿠키를 제거하기위한 자신 만의 방법을 정의 할 수 있습니다 나타납니다. 내 경우에는 간단 유지하려면

, 나는 후드 기본 쿠키 관리자를 다시 사용합니다. (나는 그것의 방법을 재정의하지, 그것을 확장 할 수 없습니다.) 여기

내가 함께 만난다 코드입니다 :

using Microsoft.AspNet.Identity; 
using Microsoft.Owin; 
using Microsoft.Owin.Infrastructure; 
using Microsoft.Owin.Security.Cookies; 
using Microsoft.Owin.Security.DataProtection; 
using Owin; 

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var options = new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      SlidingExpiration = true, 
      CookieManager = new CustomCookieManager() 
     }; 

     app.UseCookieAuthentication(options); 
    } 
} 

public class CustomCookieManager : ICookieManager 
{ 
    private readonly ICookieManager ConcreteManager; 

    public CustomCookieManager() 
    { 
     ConcreteManager = new ChunkingCookieManager(); 
    } 

    string ICookieManager.GetRequestCookie(IOwinContext context, string key) 
    { 
     return ConcreteManager.GetRequestCookie(context, key); 
    } 

    void ICookieManager.AppendResponseCookie(IOwinContext context, string key, string value, CookieOptions options) 
    { 
     SetupDomain(context, options); 
     ConcreteManager.AppendResponseCookie(context, key, value, options); 
    } 

    void ICookieManager.DeleteCookie(IOwinContext context, string key, CookieOptions options) 
    { 
     SetupDomain(context, options); 
     ConcreteManager.DeleteCookie(context, key, options); 
    } 

    private void SetupDomain(IOwinContext context, CookieOptions options) 
    { 
     // custom logic for assigning something to options.Domain 
    } 
}