호환성: 응용 프로그램 간 인증 쿠키 공유하기
- 본 번역문서의 원문은 Sharing cookies between applications docs.microsoft.com 입니다.
일반적으로 웹 사이트는 서로 조화롭게 동작하는 다수의 개별적인 웹 응용 프로그램으로 구성되는 경우가 많습니다. 따라서 응용 프로그램 개발자가 좋은 Single Sign-On 경험을 제공하기 위해서는, 사이트에 존재하는 모든 개별적인 웹 응용 프로그램들 간에 서로 인증 티켓을 공유해야 하는 경우가 종종 발생합니다.
이런 시나리오에 대응하기 위해서, 데이터 보호 스택은 Katana 쿠키 인증 및 ASP.NET Core 쿠키 인증 티켓의 공유를 지원합니다.
응용 프로그램 간 인증 쿠키 공유하기
두 개의 다른 ASP.NET Core 응용 프로그램 간에 서로 인증 쿠키를 공유하려면, 쿠키를 공유할 응용 프로그램들을 각각 다음과 같이 구성합니다.
구성 메서드 내에서 CookieAuthenticationOptions를 이용해서 쿠키에 관련된 데이터 보호 서비스를 설정하고 AuthenticationScheme을 ASP.NET 4.X에 적합하게 설정합니다.
역주
이 부분의 AuthenticationScheme과 관련된 설명은 원문의 저자가 다음 절의 내용까지 염두에 둔 것으로 보입니다. AuthenticationScheme에 관한 보다 자세한 설명은 ASP.NET Core Identity 없이 Cookie 미들웨어 사용하기 문서를 참고하시기 바랍니다.
ASP.NET Core Identity를 사용 중인 경우:
app.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
options.Cookies.ApplicationCookie.AuthenticationScheme = "ApplicationCookie";
options.Cookies.ApplicationCookie.DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"c:\shared-auth-ticket-keys\"));
});
쿠키 미들웨어를 직접 사용할 경우:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"c:\shared-auth-ticket-keys\"))
});
DataProtectionProvider
를 사용하려면 Microsoft.AspNetCore.DataProtection.Extensions
NuGet 패키지가 필요합니다.
이 방식을 사용할 경우, DirectoryInfo는 인증 쿠키 전용으로 따로 준비된 키 저장소의 위치를 가리켜야 합니다. 이 쿠키 인증 미들웨어는 명시적으로 제공된 DataProtectionProvider의 구현을 사용하게 되는데, 이 DataProtectionProvider는 응용 프로그램의 다른 영역에서 사용되는 데이터 보호 시스템과 격리됩니다. 이때, 응용 프로그램들 간의 격리를 위해서 삽입되는 응용 프로그램 이름은 무시됩니다 (이는 의도적인 것으로, 여러 응용 프로그램에서 페이로드를 공유하려고 시도하고 있기 때문입니다).
주의
다음 예제처럼 DataProtectionProvider를 구성해서 저장된 비활성 키를 암호화하는 방안을 고려하시기 바랍니다.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
DataProtectionProvider = DataProtectionProvider.Create(
new DirectoryInfo(@"c:\shared-auth-ticket-keys\"),
configure =>
{
configure.ProtectKeysWithCertificate("thumbprint");
})
});
ASP.NET 4.x 응용 프로그램과 ASP.NET Core 응용 프로그램 간 인증 쿠키 공유하기
Katana 쿠키 인증 미들웨어를 사용하는 ASP.NET 4.x 응용 프로그램은 ASP.NET Core 쿠키 인증 미들웨어와 호환되는 인증 쿠키를 생성하도록 구성할 수 있습니다. 이를 활용하면 대규모 사이트를 구성하는 각각의 응용 프로그램들을 단계적으로 업그레이드 하면서, 동시에 계속해서 사이트 전체에 걸친 원활한 Single Sign 경험을 제공할 수 있습니다.
팁
프로젝트의 Startup.Auth.cs 파일에서 UseCookieAuthentication을 호출하는 코드가 존재하는지 확인해보면 기존 응용 프로그램이 Katana 쿠키 미들웨어를 사용하는지 여부를 알 수 있습니다. Visual Studio 2013 및 그 이후 버전에서 생성된 ASP.NET 4.x 웹 응용 프로그램은 기본적으로 Katana 쿠키 인증 미들웨어를 사용합니다.
노트
ASP.NET 4.x 응용 프로그램은 .NET Framework 4.5.1 또는 그 이후 버전을 대상으로 해야 합니다. 그렇지 않으면 필수 NuGet 패키지가 설치되지 않습니다.
ASP.NET 4.x 응용 프로그램과 ASP.NET Core 응용 프로그램 간에 인증 쿠키를 공유하려면, 이전 절에서 설명한 것처럼 ASP.NET Core 응용 프로그램을 구성하고 다음과 같은 과정에 따라 ASP.NET 4.x 응용 프로그램을 구성하십시오.
-
Microsoft.Owin.Security.Interop 패키지를 대상 ASP.NET 4.x 응용 프로그램에 설치합니다.
-
Startup.Auth.cs 파일에서 UseCookieAuthentication을 호출하는 코드를 찾습니다. 일반적으로 다음과 같은 형태를 띄고 있습니다.
app.UseCookieAuthentication(new CookieAuthenticationOptions { // ... });
-
다음과 같이 UseCookieAuthentication 호출을 수정해서, CookieName을 ASP.NET Core 쿠키 인증 미들웨어에서 사용되는 이름과 동일하게 변경하고, 키 저장소 경로를 전달해서 초기화 한 DataProtectionProvider의 인스턴스를 제공하고, 청크 형식이 호환되도록 CookieManager를 Interop ChunkingCookieManager로 설정합니다.
app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, CookieName = ".AspNetCore.Cookies", // CookiePath = "...", (if necessary) // ... TicketDataFormat = new AspNetTicketDataFormat( new DataProtectorShim( DataProtectionProvider.Create(new DirectoryInfo(@"c:\shared-auth-ticket-keys\")) .CreateProtector("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", "Cookies", "v2"))), CookieManager = new ChunkingCookieManager() });
DirectoryInfo는 ASP.NET Core 응용 프로그램에서 지정한 저장소 위치와 동일한 경로를 가리켜야 하고 동일한 설정을 사용해서 구성돼야 합니다.
이렇게 구성하면 ASP.NET 4.x 및 ASP.NET Core 응용 프로그램이 인증 쿠키를 공유하게 됩니다.
노트
각 응용 프로그램들의 Identity 시스템이 동일한 사용자 데이터베이스를 바라보고 있는지 확인해야 합니다. 그렇지 않으면, 런타임 시에 Identity 시스템이 인증 쿠키의 정보와 데이터베이스의 정보가 일치하는지 여부를 확인할 때 오류가 발생합니다.
- 권한부여: 개요 2017-01-14 08:00
- 권한부여: 간단한 권한부여 2017-01-14 11:00
- 권한부여: 역할 기반 권한부여 2017-01-14 14:00
- 권한부여: 클레임 기반 권한부여 2017-01-15 08:00
- 권한부여: 사용자 지정 정책 기반 권한부여 2017-01-15 11:00
- 권한부여: 요구사항 처리기와 의존성 주입 2017-01-15 14:00
- 권한부여: 리소스 기반 권한부여 2017-01-16 08:00
- 권한부여: 뷰 기반 권한부여 2017-01-16 11:00
- 권한부여: 스키마별 신원 제한 2017-01-16 14:00
- 인증: ASP.NET Core Identity 살펴보기 2017-01-30 08:00
- 인증: Facebook, Google 및 기타 외부 공급자를 이용한 인증 활성화시키기 2017-02-13 08:00
- 인증: Facebook 인증 구성하기 2017-02-13 11:00
- 인증: Twitter 인증 구성하기 2017-02-20 08:00
- 인증: Google 인증 구성하기 2017-02-20 11:00
- 인증: Microsoft 계정 인증 구성하기 2017-02-20 14:00
- 인증: 계정 확인 및 비밀번호 복구 2017-03-06 08:00
- 인증: SMS를 이용한 2단계 인증 2017-03-13 08:00
- 인증: ASP.NET Core Identity 없이 Cookie 미들웨어 사용하기 2017-03-20 08:00
- 데이터 보호: 데이터 보호 개요 2017-03-27 08:00
- 데이터 보호: 데이터 보호 API 시작하기 2017-03-29 08:00
- 데이터 보호: 소비자 APIs 개요 2017-03-31 08:00
- 데이터 보호: 용도 문자열 2017-04-03 08:00
- 데이터 보호: ASP.NET Core의 용도 계층 구조 및 다중-테넌트(Multi-Tenancy) 2017-04-05 08:00
- 데이터 보호: 비밀번호 해싱 2017-04-07 08:00
- 데이터 보호: 보호된 페이로드의 수명 제한하기 2017-04-10 08:00
- 테이터 보호: 키가 취소된 페이로드의 보호 해제하기 2017-04-12 08:00
- 데이터 보호: 데이터 보호 구성하기 2017-04-14 08:00
- 데이터 보호: 키 관리 및 수명 기본 설정 2017-04-17 08:00
- 데이터 보호: 머신 수준 정책 2017-04-19 08:00
- 데이터 보호: 비-DI 인식 시나리오 2017-04-21 08:00
- 호환성: 응용 프로그램 간 인증 쿠키 공유하기 2017-05-12 08:00
- 호환성: ASP.NET의 <machineKey> 요소 대체하기 2017-05-16 08:00
- 교차 원본 요청 활성화시키기 (CORS) 2017-05-17 08:00
- ASP.NET Core 응용 프로그램에 SSL 적용하기 2017-05-18 08:00
- 개발 중 민감한 응용 프로그램 정보 안전하게 저장하기 2017-05-19 08:00