1

배경 정보 : 우리는 현재 스위트로 판매되는 3 개의 독립 실행 형 ASP.NET 응용 프로그램을 개발했습니다. 고객은 1, 2 또는 모든 응용 프로그램을 주문할 수 있습니다.ASP.NET MVC 5 - 여러 프로젝트, 단일 인증 - SSO

독립 실행 형 응용 프로그램이므로 이로 인해 문제가 발생하며이를 수정하는 방법에 대해서는 확실하지 않습니다. 응용 프로그램은 모두 사용자가 각 사용자 계정을 세 번 만들고 사용자가 각 응용 프로그램에 대해 별도로 로그온해야하는 고유 한 들여 쓰기 구현을 사용합니다. 결과적으로 클라이언트는 SSO 구현을 요청합니다.

문제점 : 우리는 SSO에 대한 연구를 수행했으며 Thinktecture IdentityServer는 정말 훌륭하게 우리 문제를 해결할 수 있습니다. 그러나 사용자는 응용 프로그램의 일부 엔터티에 연결됩니다.

  • IdentityServer와 세 개의 클라이언트 응용 프로그램간에 일관성 (또는 외부 키)을 보장하는 방법은 무엇입니까?
  • 사용자는 응용 프로그램 내에서 작성된 순간부터 사용할 수 있어야합니다 (사용자는 아직 로그온하지 않았더라도 다른 사용자를 선택할 수 있어야합니다). 사용자가 ID 서버에서 생성 될 때 응용 프로그램에서 사용자가 생성되도록하려면 어떻게해야합니까?

아마도 우리는 완전히 잘못된 경로에 있습니다. 우리가 직면하고있는 문제를 해결할 다른 해결책이 있습니까? 많은 분들께 미리 감사드립니다.

답변

0

머리에 DBA를 끄고 사물을 다르게보아야합니다. 외래 키는 관계형 데이터베이스에서만 사용할 수 있으며 심지어 DB가 동일한 서버에 있더라도 다른 DB의 엔터티에 항상 연결할 수있는 것은 아닙니다.

"외래 키"요구 사항을 적용하고 사용자 이름 또는 UserIds (아마도 GUID)를 사용하여 도메인 개체를 사용자와 연결하십시오.

두 번째 요구 사항에 대해 - 나는 그 질문이 무엇인지 잘 모르겠습니다. 아직 존재하지 않는 사용자를 위해 도메인 엔티티를 만들어야한다고 말하면, 어쨌든 엉망입니다. 존재하지 않는 것으로는 작업 할 수 없습니다. 간단한 대답은 먼저 Identity 서버에서 사용자를 만든 다음 해당 사용자의 도메인 엔터티를 만드는 것입니다. 그런 다음 나중에 사용자 속성을 변경하고 실제 사용자에게 사용자 이름/암호를 사용하여 사용하도록 할 수 있습니다.

1

먼저, vs2013 웹 템플리트에 구운 OWIN Authorization server이 있으며,이를 선택하면 독립형 서버로 뜯어 낼 수 있습니다. 즉, Thinktecture 서버는 귀하의 유일한 옵션이 아니며, 강력하고 완벽한 기능을 갖추고 있습니다.

손에서 문제를 해결하기 위해 몇 가지 옵션이 마음에 와서 :

    는 별도의 데이터베이스와 별도의 DbContext 속으로 사용자 관리 브레이크
  1. . 클래스 라이브러리로 코드를 작성하면 단일 중앙 데이터베이스에서 모든 사용자를 관리하고 DbContext 및 파생 된 IdentityUser 클래스를 다시 사용할 수 있습니다. 이것은 상황을 처리하는 쉽고 빠르며 덜 복잡한 방법입니다.
  2. 사용자를 만들기위한 보안 웹 API를 만들고이를 3 개의 모든 사이트에 포함하십시오. Identity UserManager를 서브 클래스 화하고 다른 두 사이트를 호출하여 다른 사이트에서 먼저 사용자를 만든 다음 현재 사이트에서 사용자를 만듭니다. 모든 사이트에서 오류가 발생하면 사용자를 생성하고 사용자가 생성 된 모든 사이트에서 롤백하지 마십시오.이 옵션을 사용하면 작업을 동기화해야하기 때문에 첫 번째 옵션보다 훨씬 많은 작업이 필요하지만 어떤 이유로 사용자 관리를 위해 단일 데이터베이스를 사용할 수없는 경우이 작업이 가능합니다.