2

나는 다음과 같은 구조를ASP.NET 4.0 단일 기호

www.website.com있어 실패 .website.com/블로그 -> NET 4.0, 웹 응용 프로그램

둘 다 동일한 SQL 데이터베이스에 대해 폼 인증을 수행하고 ASP.NET ASP.NET 멤버 자격 및 역할을 사용합니다. 각 부분에 똑같은 사용자 (동일한 사용자/비밀번호)로 로그인 할 수 있지만 인증은 수행되지 않습니다. 즉, /에 로그인 한 다음 /blog/에 대한 링크를 클릭하면 /blog/은 내가 익명으로 생각하고 다시 로그인하라는 메시지를 표시합니다. 나는 기초

  1. 사이트뿐만 아니라 응용 프로그램 모두에서 동일한 <authentication mode="Forms">이 web.configs는
  2. 동일한 <machineKey> 섹션 (예, 동일한 validationKey의와 및 decryptionKey)

을했습니다 그래서 나는 생성 된 쿠키를 검사하여 웹 사이트와 웹 애플리케이션이 다른 쿠키에서 작동하고있는 것으로 보였다.

website.com 의해
  • .ASPXROLES에게

    • .ASPXFORMSAUTH-27604f05-86ad-47ef-9e05-950bb762570c를 생성

    쿠키 website.com/blog 의해 생성

    쿠키

    • .ASPXFORMSAUTH
    내가 있었다 http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

    뿐만 아니라 Single Sign On with Forms Authentication 같은 여러 가지 다른 게시물을 읽을 않았다

    <authentication mode="Forms"> 
        <forms timeout="30" slidingExpiration="true" name=".ASPXFORMSAUTH" enableCrossAppRedirects="true" protection="All" cookieless="UseCookies"/> 
    </authentication> 
    

    과 같은 동일한 <authentication> 섹션에도 불구하고 그것을 볼 수 있지만

    나는이 문제라고 생각합니다 또한 내가 기억할 수없는 몇 가지 다른 게시물들. 나는 그들 모두를 겪어 왔지만 여전히 붙어있다. 필요한 경우 더 많은 디버그 데이터를 기꺼이 제공 할 수 있습니다.

    누군가가 가질 수있는 조언을 정말 고맙겠습니다! 나는이 벽에 벽을 치고 있다고 생각한다!

  • 답변

    2

    좋아, 그래서 오랫동안 그것을 치고 난 후에 내 자신의 질문에 대답 할 수 있었다.

    기본적으로 BlogEngine.NET 2.5 (내 웹 앱)는 .NET 4.0 프레임 워크 방식을 재정의하는 것처럼 보입니다. 수정해야 할 몇 가지가 있습니다. 모두 BlogEngine.Core \ Security \ Security.cs (BlogEngine을 다운로드하십시오.NET 소스 코드)

    1 부 :

    File: BlogEngine.Core\Security\Security.cs 
    Method: FormsAuthCookieName() 
    // return FormsAuthentication.FormsCookieName + "-" + Blog.CurrentInstance.Id.ToString(); 
    return FormsAuthentication.FormsCookieName; 
    

    이 쿠키 이름이 동일한 지 확인합니다 : 수정 쿠키 이름

    에서 다음과 같이 내가 변경하는 방법에 FormsAuthCookieName있다 . 아래 하나 개의 장애물 ...

    2 부 : 웹 응용 프로그램 피/BlogEngine.NET의 로그인 페이지/제어/코드 대신 지시 사용자의

    합니다 (BlogEngine.Net의 login.aspx에 로그인 www.website .com \ blog \ account \ login.aspx), 나는 을 모두 가리켰다. 로그인은 나의 메인 웹 사이트의 login.aspx 페이지 (www.website.com \ login.aspx)에 대한 링크로 연결된다. 경우에 당신은 당신에게 자신의 사이트 전체 인증을 구현하는 방법을 생각해보고,이 나는 또한 웹 사이트의 web.config 모두 같은 것을 추가 할뿐만 아니라했다 슈퍼 퀵 가이드

    msdn.microsoft.com/en-us/library/ff184050.aspx. 
    

    입니다 web-app web.config. 보호 된 리소스에 액세스 할 때마다 (웹 사이트 또는 웹 앱에서) 내 자신의 global/login/aspx가 사용됩니다.

    <authentication mode="Forms"> 
    <forms timeout="30" loginUrl="/login.aspx" blah blah /> 
    </authentication> 
    

    지금, 내 자신의 일반적인, 사이트 전체 사용자 로그인 컨트롤은 (.NET 프레임 워크 표준) 인증 쿠키와 (사용자) 역할 쿠키를 만드는 것입니다. BlogEngine.NET의 login.aspx를 피함으로써 문제가되는이 코드를 호출하는 것을 피할 수 있습니다.

    File: BlogEngine.Core\Security\Security.cs 
    Method: AuthenticateUser(string username, string password, bool rememberMe) 
    

    세부 사항 :그 코드를 추가하는 동일한 도메인에 여러 블로그를 가지고, 그래서 만약이 자동으로 인증되는 NOT에서 블로그 인스턴스 1에 인증 된 사용자 1을 방지 할 수 있도록, 쿠키로 "예를 블로그" 블로그 인스턴스 2. 나는 대부분 도메인 (도메인 www.domain.com \ blog!) 당 하나의 블로그를 가질 것 같아요, 이것은 불필요합니다. 더 중요한 것은, 그 수표는 우리의 싱글 사인온을 깨뜨리는 것입니다. 아래

    두 장애물 ...

    3 부 : 지금 별 접근 권한 검사

    수정 사이트 전체, 표준화 된 login.aspx 특정 BlogEngine.NET 인스턴스를 추가하지 않습니다 ID (위 참조). 이것은 특별히 찾고있는 BlogEngine.NET 코드가 여전히 있다는 것을 제외하고는 괜찮 았을 것입니다. 우리는

    File: BlogEngine.Core\Security\Security.cs 
    Method: void Init(HttpApplication context) 
    // Comment line below to revert to only-framework/default processing 
    //context.AuthenticateRequest += ContextAuthenticateRequest; 
    

    그래서이 시점에서 단일 사이트 전체 login.aspx에 의해 처리

    • 모든 로그인을해야한다 ... 그래서 잘못된 체크를 제거 할 수 있습니다, 그 중 하나 체크가 필요하지 않습니다 넓은 위의 사이트 login.aspx
    • 암호화 및 웹 사이트 & 웹 응용 프로그램 web.configs 모두의 당 보호 모든 쿠키 만든
    • 모든 인증 쿠키 사용자 역할 쿠키 (이 일치해야합니다!)

    차례로 싱글 사인온을 허용합니다. :) !! 만세!

    +0

    변경 사항을 구성 할 수없고 관리자가 수락 할 수 없는지 확인하는 것이 좋습니다. 동일한 도메인의 여러 엔진과 단일 사인온 간의 트레이드 오프라고 생각됩니다. 하나 또는 둘 중 하나를 선택해야하지만 사용자가 작동하도록 디버깅 할 필요가 없습니다. – jmoreno

    1

    추가적으로 : 두 web.configs에서 동일한 validationKey와 동일한 decryptionKey를 사용하여 machinekey를 삽입해야합니다.

    0

    잘 조사되었습니다. 나는 소스 코드를 다운로드하고 개조를했다. 불행하게도 나는 그것을 작동시킬 수 없다. 나는 소스 코드를 연구했고 당신이 제안한 것이 완전히 합리적이라고 생각한다. 나는 내 상황을 놓치고있다. 어쨌든 공유해 주셔서 감사합니다.

    +0

    감사합니다. jmoreno의 대답도 확인하십시오. machine.config/web.config의 서로 다른 우선 키가 문제를 일으킬 수 있습니다. 희망은 상황을 도와줍니다. – DeepSpace101

    +0

    .net 4.0과 .net 4.5 사이에 암호화가 변경되었습니다. –

    +1

    blogengine 소스 코드에서 싱글 사인온 (single sign on)을 구성 할 수 있었고 pull 요청이 master 브랜치로 받아 들여졌습니다. 그래서 web.config에서 BlogEngine.SingleSignOn = true를 설정하여 원하는 동작을 얻습니다. –