2016-06-09 3 views
1

MVC (5 생각) 및 WebApi2.0을 사용하여 Visual Studio Web Project를 기반으로 개발 한 솔루션을 개발 중입니다.MVC 웹 응용 프로그램에서 OWIN 인증 추상화

솔루션의 특성상 DAL 2 개가 SQL을 사용하여 다른 응용 프로그램 데이터베이스에 액세스하고 다른 DAL은 entityframework codefirst를 사용하여 응용 프로그램 데이터베이스를 관리합니다. 또한 프로젝트와 관련된 서비스가 있으므로 전체 솔루션을 3 단계 패턴으로 적용하기 위해 최선을 다했습니다. 즉, BusinessLogic이 포함 된 프로젝트가 있으며 우리의 서비스와 컨트롤러 모두 DAL에 액세스하는 데 사용됩니다.

이렇게 외딴 곳에서 ... 우리는 이제 웹 측에서 인증을 추가하고 있습니다. OWIN 인증을 사용하여 Microsoft의 기본 프로젝트 구조를 수용하기까지는 며칠 동안 계속 노력했습니다. 단점은 솔루션의 프레젠테이션/웹 레이어와 본질적으로 결합 된 별도의 사용자 데이터베이스가 있다는 것입니다.

MVC 프로젝트에서 기본 OWIN 인증의 모든 편의를 유지하고 LogicLayer로 추상화 할 수있는 방법이 있습니까? 우리가 작업 한 것을 게시 할 수는 없지만, 언제나 실패하고 있다고 말할 필요는 없습니다. 우리가 실제로 무엇을하고 있는지 파악하려고 애 쓰고 있기 때문에 매번 실패합니다. (예 : [OwinStartupAttribute (typeof (AlarmAggregator. Startup))] 주석). 이 주석만으로는 우리가 추상화 할 수 없을 것이라고 생각합니다. 나는 내 케이크를 가지고 그것을 먹을 것을 요구하고 있음을 알고 있지만 가능하다면 누군가가 통찰력을 가지기를 바랬다.

적어도 내부 데이터베이스와 사용자 데이터베이스를 결합 할 수있는 방법이 있었으면 좋겠다. 문맥 수준에서 이런 일이 일어날 것이라고 생각합니까? 내부 컨텍스트에서 web.config를 가리키는 것만 큼 간단할까요?

+1

Google은 SQL Server를 사용하여 사용자 지정 ID (실제로 사용하고있는 사용자) 설정에 대해 사용자가 원하는 것을 수행 할 수있는 방법을 이해할 가능성이 높습니다. –

+0

@cFrozenDeath 사용자 지정 ASP.NET ID? 맞춤 스토리지 공급자입니까? Identity는 OWIN 일입니까 아니면 ASP.NET 일입니까? – SmashCode

+1

Identity는 OWIN 미들웨어에서 실행되는 멤버 자격 공급자 (인증/인증)입니다. 신원은 원하는 저장소 공급자 (SQL Server, MySQL 등)에 구성 할 수 있습니다. OWIN은 ASP.NET과 같은 것입니다. OWIN의 기본 튜토리얼/문서를보실 것을 적극 권장합니다. –

답변

1

2 개의 데이터베이스가 무엇인지 언급하지 않았으므로 사용자 데이터베이스가 아니며 컨텍스트를 벗어난 것으로 가정합니다. 사용자 신원 저장소에 초점을 맞 춥니 다. 예를 들어 ADFS, LDAP 등을 사용하지 않는 한 별도의 엔터티가됩니다. 나는 당신이 자신의 정체성 해결책을 구축하는 것을 꺼려하고, 보안 주제로 인해 널리 사용되거나 받아 들여지는 것을주의해야합니다.

Thinktecture Identity Server을 살펴보십시오. OpenId Connect 기반의 오픈 소스 솔루션으로 .NET에 내장되어 있습니다. 자체 데이터베이스와 함께 제공되며 동일한 도메인 SSO, 쿠키 기반 인증을 지원하며 개방형 ID 연결을 지원합니다. ADFS에 연결하려는 경우 페더레이션 인증도 지원합니다. 또한 그것과 통합 된 사회적 사인을 할 수도 있습니다.

.NET, Java 및 PHP 솔루션을 프로덕션 환경에서 동일한 인스턴스에 통합했으며 모든 것이 환상적이며 완벽합니다.

별도의 서비스로 호스트 할 수 있습니다. 알려진 클라이언트 (앱 및 서비스), 로그 아웃 후 URL을 포함하여 들어오고 리디렉션되는 URL을 등록 할 수 있으므로 응용 프로그램이 신원 서버에서 원활하게 액세스하여 다시 액세스 할 수 있습니다. Identity Server에는 API 및 웹 응용 프로그램을 보호하는 데 필요한 모든 미들웨어가 함께 제공됩니다. 또한 액세스 토큰을 얻고 유효성을 검사하기위한 REST 엔드 포인트를 제공합니다.

다른 범위를 설정하여 요청을 처리 할 수있는 범위를 지정할 수도 있습니다.

내가 말하는 바는 oAuth 2.0 스펙과 직접적으로 관련이 있습니다. 아마도 당신이 그것에 대해 모른다면 here을 조금이라도 읽을 수있을 것입니다.

전형적인 oAuth 흐름 (예를 들어,g 암시 적 플로우 또는 인증 코드 플로우), Owin 파이프 라인에서 올바른 미들웨어를 연결하고 API 리소스를 [Authorize] 속성으로 꾸미면 애플리케이션은 사용자가 로그인 할 수있는 ID 서버 페이지로 리디렉션됩니다. API (보호 된 리소스)는 토큰이 제시되고 특정 토큰을 기반으로 요청을 수락/거부 할 수 있도록 허용 할 것인지 여부를 지정할 수 있습니다.

클라이언트 등록을 통해 알려진 클라이언트 만 신원 확인 서버 (응용 프로그램은 일반적으로 인터넷에 연결됨)로 받아 들여지며 MembershipReboot 구성 요소를 사용하거나 Thinktecture (또한 opensource)에서 신원 저장소로 사용하거나 자신의 구현을 작성할 수 있습니다 "사용자 서비스". 사용 가능한 확장 점이 너무 많으며 클라이언트 응용 프로그램의 UI 체계와 일치하도록 ID 서버 페이지의 모양 및 느낌을 포함한 모든 내용을 실질적으로 사용자 정의 할 수 있습니다. IUserService (자신의 사용자 저장소, UI를 사용자 정의하는 ViewLoader, 클라이언트 당 허용 된 출처를 지정하는 CORS 정책 서비스, 토큰 (액세스/새로 고치기 토큰), ScopeStore, ClientStore, TokenHandleStore (범위 저장을위한 인증서 기반의 TokenSigningService, 클라이언트 구성, 토큰), ClaimsFilters를 사용하여 토큰을 발행 할 때 포함되는 클레임을 필터링하여 저장하거나 제공해야하는 더 많은 정보를 반환하는 외부 공급자를 사용할 때 유용합니다.

하지만 사용 가능한 무언가를 말했듯이 프로덕션 환경의 여러 응용 프로그램에서 사용하고있는 것처럼, 시도해 볼 수 있습니다.

Identity Server와 MembershipReboot 데이터베이스를 모두 설정 한 상태에서 로컬 컴퓨터에서 30 분 안에 실행하면됩니다. 지원은 저자들로부터 매우 우수하며 이것은 사용자 인증 및 권한 부여를위한 매우 널리 인정 된 솔루션입니다. 1.이 가서 당신이 owin에 권한 부여를 위해 뭔가 설정을 가지고 있는지 확인하기 위해 API를 알려줍니다 2. 필요에 따라 [Authorize] 및 또는 [ScopeAuthorize]와 API를 장식 : 예를 들어

는 WebAPI를 확보하는 것은 매우 간단하다 관로. Owin 시작에서 3. 단지 사용

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions() 
      { 
       Authority = "http://your-idserver-url" 
      }); 

예 그건 당신이 당신의 WebAPI에 필요한 모든 변화이다. MVC 기반 웹 응용 프로그램의 오픈 아이디 구성을 설정하는 별도의 방법이 있지만 어쨌든 샘플 코드가있는 문서에서 사용할 수 있습니다.

설명서는 매우 쉽게 따라갈 수 있으며 서버를 쉽게 설정할 수 있습니다. App 및 서비스의 모든 복잡성을 제거하므로 각 Apps 또는 서비스에서 인증 및 권한 처리에 대해 걱정할 필요없이 App이 원하는 것을 집중할 수 있습니다.

관련 문제