현재 기본 클라이언트 아이디와 비밀을 가진 외부 로그인 공급자가있는 Identity Server 4 웹 응용 프로그램을 만들었습니다. 그러나 내 목표는 테넌트를 기반으로 Azure, Google, Facebook과 같은 인증 공급자를 등록하는 것입니다.
내가 사용이 SaasKit 여기에 내가 시도, 조립 멀티 테넌시 (multi-tenancy)를 app.usepertenant () 미들웨어. 그러나 UseGoogleAuthentication () 메소드는 더 이상 사용되지 않으므로이 유스 테넌트 미들웨어를 사용하여 다중 테넌트 인증을 얻을 수 없습니다.
현재 코드
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddMicrosoftAccount(option =>
{
option.ClientId = "clientid";
option.ClientSecret = "clientsecret";
option.SaveTokens = true;
});
예상 코드는 다음과 같습니다.
var authentication = services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);
if (tenant.hasMicrosoft)
{
authentication.AddMicrosoftAccount(option =>
{
option.ClientId = "clientid";
option.ClientSecret = "clientsecret";
option.SaveTokens = true;
});
}
if (tenant.hasGoogle)
{
authentication.AddGoogle(option =>
{
option.ClientId = "clientid";
option.ClientSecret = "clientsecret";
option.SaveTokens = true;
});
}
authentication.AddCookie( options =>
{
options.SlidingExpiration = true;
options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
});
답변
공식 MS 문서, 테넌트 당 인증 공급자 참조
ASP.NET Core 프레임 워크에는 다중 테넌트 인증을위한 기본 제공 솔루션이 없습니다. 내장 기능을 사용하여 고객이 글을 작성할 수는 있지만, 이러한 목적 으로 Orchard Core 를 살펴 보는 것이 좋습니다 .
답변
DI 등록 중에 인증을 구성해야하므로 일반적으로 인증 등록 중에 모든 외부 로그인 공급자를 설정해야합니다.
이 단계에서 모든 체계를 추가해야합니다. 체계에는 고정 클라이언트 ID / 비밀번호가 있으므로 모든 클라이언트를 지원하는 모든 외부 로그인 공급자 자격 증명으로 IdentityServer를 부트 스트랩해야합니다. 구성표 이름은 고유해야합니다.
예를 들어, 테넌트 A에는 “A_microsoft”체계가 있고 테넌트 B에는 “B_microsoft”체계가있을 수 있습니다.
그런 다음 IdentityServer에서 메소드를 호출 할 때 해당 인증 체계를 참조 할 수 있습니다. 로그인, 챌린지, 사인 아웃 등
이를 위해서는 IdentityServer의 전체 테넌트 세트를 부트 스트랩해야합니다. 시나리오에 따라 테넌트가 정기적으로 업데이트되는 경우 새로운 인증 체계를 인식하기 위해 IdentityServer를 정기적으로 다시 시작해야합니다.
이것이 문제라면 IdentityServer를 실행하는 동안 등록 된 인증 체계를 확장 할 수 있지만 쉽지는 않습니다. AspNetCore와 함께 제공되는 인증 미들웨어의 대규모 사용자 정의 구현이 필요할 수 있습니다.
답변
여러 인증 공급자에 대한 지원을 추가 하시겠습니까? 이 문서는 이미 구성 서비스에서 여러 인증 제공자를 추가하는 방법을 지정했습니다. app.UseXXX
더 이상 직접 파이프 라인을 구성 할 필요가 없습니다.