asp.net core 3.1에서 테넌트를 기반으로 인증 체계 등록


12

현재 기본 클라이언트 아이디와 비밀을 가진 외부 로그인 공급자가있는 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);
 });


아마도이 에서 답이나 해결책을 찾을 수있을 것 입니다.
Ruard van Elburg

@RuardvanElburg 귀하의 답장을 보내 주셔서 감사합니다. 제안 된 스레드에서 응용 프로그램을 시작하는 동안 테넌트를 기반으로 이미 등록 된 구성표 옵션을 업데이트 할 수 있습니다. 업데이트 할 수 없으면
Madhan kumar D

테넌트마다 다른 ClientId / ClientSecret 설정을 원하십니까? 아니면 테넌트에 따라 다른 체계 만 추가 하시겠습니까?
커크 라킨

각각의 테넌트의 clientId / secret을 가진 @KirkLarkin 다른 체계. 아래와 같이 if (tenant.hasMicrosoft) {authentication.AddMicrosoftAccount (option => {option.ClientId = "clientid"; option.ClientSecret = "clientsecret"; option.SaveTokens = true;}); }
Madhan kumar D

이것에 대한 업데이트?
Madhan kumar D

답변:


3

공식 MS 문서, 테넌트 당 인증 공급자 참조

ASP.NET Core 프레임 워크에는 다중 테넌트 인증을위한 기본 제공 솔루션이 없습니다. 내장 기능을 사용하여 고객이 글을 작성할 수는 있지만, 이러한 목적 으로 Orchard Core 를 살펴 보는 것이 좋습니다 .


0

DI 등록 중에 인증을 구성해야하므로 일반적으로 인증 등록 중에 모든 외부 로그인 공급자를 설정해야합니다.

이 단계에서 모든 체계를 추가해야합니다. 체계에는 고정 클라이언트 ID / 비밀번호가 있으므로 모든 클라이언트를 지원하는 모든 외부 로그인 공급자 자격 증명으로 IdentityServer를 부트 스트랩해야합니다. 구성표 이름은 고유해야합니다.

예를 들어, 테넌트 A에는 "A_microsoft"체계가 있고 테넌트 B에는 "B_microsoft"체계가있을 수 있습니다.

그런 다음 IdentityServer에서 메소드를 호출 할 때 해당 인증 체계를 참조 할 수 있습니다. 로그인, 챌린지, 사인 아웃 등

이를 위해서는 IdentityServer의 전체 테넌트 세트를 부트 스트랩해야합니다. 시나리오에 따라 테넌트가 정기적으로 업데이트되는 경우 새로운 인증 체계를 인식하기 위해 IdentityServer를 정기적으로 다시 시작해야합니다.


이것이 문제라면 IdentityServer를 실행하는 동안 등록 된 인증 체계를 확장 할 수 있지만 쉽지는 않습니다. AspNetCore와 함께 제공되는 인증 미들웨어의 대규모 사용자 정의 구현이 필요할 수 있습니다.


0

여러 인증 공급자에 대한 지원을 추가 하시겠습니까? 이 문서는 이미 구성 서비스에서 여러 인증 제공자를 추가하는 방법을 지정했습니다. app.UseXXX더 이상 직접 파이프 라인을 구성 할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.